Anonymous
Открытие стилизованного графического интерфейса Tkinter из события нажатия кнопки Tkinter не применяет стиль
Сообщение
Anonymous » 28 ноя 2024, 16:21
У меня есть два файла в одной папке: MainApp.py и SecondApp.py.
Оба имеют ttk.Style() применяется к конкретным элементам управления. А когда вы запускаете их по отдельности, стили реализуются соответствующим образом.
MainApp:
Код: < /p>
Код: Выделить всё
import tkinter as tk
from tkinter import ttk, PhotoImage
from SecondApp import SecondApp
class MainApp:
def __init__(self, app):
self.app = app
self.app.title("MainApp")
self.app.geometry("200x200")
self.app.config(bg="#FFFFFF")
def create_styles(self):
self.style = ttk.Style()
self.style.theme_use('clam')
self.style.configure('HELP_BUTTON.TButton',
padding=10,
relief='flat',
background="#625bcb",
foreground='white')
self.style.map('HELP_BUTTON.TButton',
background=[('active', '#352cbc'), ('disabled', '#acacac')],
foreground=[('active', 'white'), ('disabled', 'gray')])
def render_widget(self):
self.btn_help_img = PhotoImage(file=fr"D:\question_mark_25px.png", master=self.app)
self.btn_help = ttk.Button(self.app, padding=(0, -1), image=self.btn_help_img, style="HELP_BUTTON.TButton")
self.btn_help.config(cursor="hand2")
self.btn_help.place(x=10, y=10, width=28, height=28)
self.btn_help.bind("", self.open_app)
def open_app(self, event):
self.root = tk.Tk()
self.sa = SecondApp(self.root)
self.sa.create_styles()
self.sa.render_widget()
if __name__ == "__main__":
root = tk.Tk()
rrt = MainApp(root)
rrt.create_styles()
rrt.render_widget()
rrt.app.mainloop()
SecondApp:
Код:
Код: Выделить всё
from tkinter import ttk
class SecondApp:
def __init__(self, app):
self.app = app
self.app.title("SecondApp")
self.app.geometry("200x200")
self.app.config(bg="#FFFFFF")
self.HEADER_FONT = ("Istok Web", 9, "bold")
def create_styles(self):
self.style = ttk.Style()
self.style.theme_use('clam')
# Debugging output
print("Creating styles for SecondApp")
self.style.configure('FLAT_BUTTON.TButton',
padding=8,
font=self.HEADER_FONT,
relief='flat',
background='#DDDDDD',
foreground='#302C2c')
self.style.map('FLAT_BUTTON.TButton',
background=[('active', '#cac6c6'), ('disabled', '#acacac')],
foreground=[('active', 'black'), ('disabled', 'gray')])
def render_widget(self):
# Debugging output
print("Rendering widget in SecondApp")
self.btn_startProcessing = ttk.Button(self.app, text="START PROCESSING", style="FLAT_BUTTON.TButton")
self.btn_startProcessing.place(x=10, y=10, width=150, height=40)
Однако, когда я связываю запуск SecondApp нажатием кнопки в MainApp, стиль SecondApp не работает т нагрузки. Стили инкапсулированы внутри соответствующих классов, и я пробовал множество модификаций своего кода, но безуспешно.
Мне интересно, сталкивался ли кто-нибудь с такой же проблемой и смог ее исправить?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... nt-apply-t
1732800118
Anonymous
У меня есть два файла в одной папке: MainApp.py и SecondApp.py. Оба имеют ttk.Style() применяется к конкретным элементам управления. А когда вы запускаете их по отдельности, стили реализуются соответствующим образом. [b]MainApp:[/b] [img]https://i.sstatic.net/CbhOiv2r.png[/img] [b]Код:[/b]< /p> [code]import tkinter as tk from tkinter import ttk, PhotoImage from SecondApp import SecondApp class MainApp: def __init__(self, app): self.app = app self.app.title("MainApp") self.app.geometry("200x200") self.app.config(bg="#FFFFFF") def create_styles(self): self.style = ttk.Style() self.style.theme_use('clam') self.style.configure('HELP_BUTTON.TButton', padding=10, relief='flat', background="#625bcb", foreground='white') self.style.map('HELP_BUTTON.TButton', background=[('active', '#352cbc'), ('disabled', '#acacac')], foreground=[('active', 'white'), ('disabled', 'gray')]) def render_widget(self): self.btn_help_img = PhotoImage(file=fr"D:\question_mark_25px.png", master=self.app) self.btn_help = ttk.Button(self.app, padding=(0, -1), image=self.btn_help_img, style="HELP_BUTTON.TButton") self.btn_help.config(cursor="hand2") self.btn_help.place(x=10, y=10, width=28, height=28) self.btn_help.bind("", self.open_app) def open_app(self, event): self.root = tk.Tk() self.sa = SecondApp(self.root) self.sa.create_styles() self.sa.render_widget() if __name__ == "__main__": root = tk.Tk() rrt = MainApp(root) rrt.create_styles() rrt.render_widget() rrt.app.mainloop() [/code] [b]SecondApp:[/b] [img] https://i.sstatic.net/51WA4aeH.png[/img] [b]Код:[/b] [code]from tkinter import ttk class SecondApp: def __init__(self, app): self.app = app self.app.title("SecondApp") self.app.geometry("200x200") self.app.config(bg="#FFFFFF") self.HEADER_FONT = ("Istok Web", 9, "bold") def create_styles(self): self.style = ttk.Style() self.style.theme_use('clam') # Debugging output print("Creating styles for SecondApp") self.style.configure('FLAT_BUTTON.TButton', padding=8, font=self.HEADER_FONT, relief='flat', background='#DDDDDD', foreground='#302C2c') self.style.map('FLAT_BUTTON.TButton', background=[('active', '#cac6c6'), ('disabled', '#acacac')], foreground=[('active', 'black'), ('disabled', 'gray')]) def render_widget(self): # Debugging output print("Rendering widget in SecondApp") self.btn_startProcessing = ttk.Button(self.app, text="START PROCESSING", style="FLAT_BUTTON.TButton") self.btn_startProcessing.place(x=10, y=10, width=150, height=40) [/code] Однако, когда я связываю запуск SecondApp нажатием кнопки в MainApp, стиль SecondApp не работает т нагрузки. Стили инкапсулированы внутри соответствующих классов, и я пробовал множество модификаций своего кода, но безуспешно. [img]https ://i.sstatic.net/o1eNN6A4.png[/img] Мне интересно, сталкивался ли кто-нибудь с такой же проблемой и смог ее исправить? Подробнее здесь: [url]https://stackoverflow.com/questions/79233459/opening-a-stylized-tkinter-gui-from-a-tkinter-button-click-event-doesnt-apply-t[/url]