Ткинтер активен по тегу - PullRequest
       6

Ткинтер активен по тегу

0 голосов
/ 28 ноября 2018

Я разрабатываю приложение с графическим интерфейсом, используя Tkinter, и для этого проекта мне нужны кнопки для меню.Глядя на кнопки, я не был потрясен параметрами настройки, которые поставляются с кнопками, особенно когда я обнаружил, что вы можете привязывать аргументы щелчка к прямоугольникам.

Это позволяет мне настраивать «кнопку» (почти) безграничными способами, но чтобы позволить мне поместить текст на кнопку, мне нужно создать прямоугольный элемент и текстовый элемент и связать их вместе, используя Tkinter tag_bind собственность.

Одним из свойств дизайна кнопки, которую я хотел, было активное заполнение, когда пользователь наводил курсор на элемент.Сейчас я просто использую activefill="", который работает, за исключением того, что текстовый элемент и элемент button будут заполняться только тогда, когда мышь находится над этим элементом.Так, например, при наведении курсора на кнопку кнопка, исключая текст, будет выделена, и наоборот, когда я наведу курсор мыши на текст.

Ниже приведена упрощенная (для краткости) версия того, что я использую для генерации кнопок;

button = canvas.create_rectangle(button_width, button_height, 10, 10, fill="000", activefill="111", tags="test")
text = canvas.create_text((button_width/2), (button_height/2), activefill="111", tags="test")
canvas.tag_bind("test", "<Button-1>", "foo")

Есть ли способ привязать активную функцию заполнения к тегу, а не к конкретномуelement?

Другой вариант заключается в том, что я полностью пропустил кучу информации о настройке кнопок в Tkinter, и мне не хотелось бы узнавать об этом.

1 Ответ

0 голосов
/ 28 ноября 2018

Вариант 1

Я бы лично не пошел на представленное решение.Я не знаю, используете ли вы кнопку, предоставленную tk или ttk.Но с помощью tkinter.tk вы можете совершенно изменить внешний вид кнопки.

Ниже приведен пример, который дает кнопку со следующими характеристиками:

  • Синийпередний план
  • Плоский вид
  • При наведении фона зеленый фон
  • При нажатии фон красного цвета

Код выглядит следующим образом:

import tkinter as tk

root = tk.Tk()

# Function hovering
def on_enter(e):
    btn['background'] = 'green'

def on_leave(e):
    btn['background'] = 'white'

# Create the button
btn = tk.Button(root, background='white', activebackground='red', foreground='blue',relief='flat',text='Test',width=20)
btn.pack()

# Bindings
btn.bind("<Enter>", on_enter)
btn.bind("<Leave>", on_leave)

# Loop
root.mainloop() 

Вариант 2

Если даже после попытки tk.Button вы не удовлетворены результатом, я бы создал Frame, содержащий Label (вы можетесделать что-нибудь с этой комбинацией).Затем вы можете изменить фон рамки в соответствии с любым действием пользователя, например:

import tkinter as tk

root = tk.Tk()

# Function hovering
def on_enter(e):
    lab['background'] = 'green'

def on_leave(e):
    lab['background'] = 'white'

# Click
def on_click(e):
    print("hi")

# Create the frame with a label inside
fr = tk.Frame(root)
lab = tk.Label(fr, text="Test", width=20, background="white")

# Packing
fr.pack()
lab.pack()

# Bindings
fr.bind("<Enter>", on_enter)
fr.bind("<Leave>", on_leave)
lab.bind("<Button-1>", on_click)

# Loop
root.mainloop()

Вы даже можете создать класс с вышеуказанной комбинацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...