ttk Styling не работает внутри функций - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть несколько кнопок ttk, но они находятся внутри функции, и всякий раз, когда я пытаюсь стилизовать его, он не работает, но когда я создаю новый файл и использую те же строки, но без помещения его в функции, он работает просто отлично. Вот фрагмент кода.

def function():
    if Something == Another thing: 
        r = Tk() # Opens new window
        r.title('Lorem ipsum')
        s = ttk.Style()
        s.configure('TButton', font=('Helvetica', 18))
        Button = ttk.Button(r, text = "lorem ipsum dolor sit amet",command = lorem ipsum,style="TButton")
        Label = ttk.Label(r, text = "Get total Stores Values and quantities")
        Label.place(relx = 0.2, rely= 0.4,anchor=CENTER)
        Button.place(relx = 0.5, rely= 0.4 ,width= 500 ,height = 50  ,anchor=CENTER)

Спасибо и надеюсь, что это достаточно ясно.

1 Ответ

2 голосов
/ 04 февраля 2020

Поскольку существует несколько Tk() экземпляров, вам необходимо указать, какому экземпляру принадлежит стиль:

from tkinter import *
from tkinter import ttk

def function():
    if True:
        r = Tk() # Opens new window
        r.geometry('600x400')
        r.title('Lorem ipsum')
        s = ttk.Style(r) # should specify which Tk instance
        s.configure('TButton', font=('Helvetica', 18))
        Button = ttk.Button(r, text="lorem ipsum dolor sit amet", style="TButton")
        Label = ttk.Label(r, text="Get total Stores Values and quantities")
        Label.place(relx=0.5, rely=0.4, anchor=CENTER)
        Button.place(relx=0.5, rely=0.6, width=500, height=50, anchor=CENTER)

root = Tk()
function()
root.mainloop()

Обратите внимание, что вы использовали TButton в качестве имени стиля, которое влияет на все ttk.Button() (на самом деле вы можете удалить style="TButton"). Лучше использовать другое имя, например Custom.TButton, если вы хотите применить стиль только к определенным виджетам.

Избегайте использования нескольких экземпляров Tk(). Используйте Toplevel(), если можете.

...