Я хочу деактивировать и активировать кнопки CustomTkinter из ветки. Но кнопки деформируются (появляются артефакты изображения). Почему это происходит и как решить проблему?
Я ожидал гладких кнопок без деформаций
from tkinter import *
import customtkinter
import threading
def function():
tabview.configure(state='disabled')
# here is other code.....
tabview.configure(state='normal')
root.update
customtkinter.set_appearance_mode("dark")
customtkinter.set_default_color_theme("blue")
root = customtkinter.CTk()
root.geometry("465x235+300+200")
root.resizable(False, False)
tabview = customtkinter.CTkTabview(root, fg_color='#242424')
tabview.pack(fill=BOTH, expand=1)
tab_1 = tabview.add("Tab_____1")
tab_2 = tabview.add("Tab_____2")
tab_3 = tabview.add("Tab_____3")
tab_4 = tabview.add("Tab_____4")
thread_ops_directory_read = threading.Thread(target=function)
thread_ops_directory_read.start()
root.mainloop()
🤔 А знаете ли вы, что...
Python подходит для начинающих программистов благодаря своей простоте и читаемости кода.
Как вы уже знаете, проблема деформации связана с тем, что обновление выполняется в дочернем потоке, поэтому вместо этого вы можете выполнить обновление в основном потоке, используя .after()
внутри потоковой функции, чтобы запланировать обновление в основном потоке.
Также, если function()
будет вызываться при запуске программы, вы можете сначала отключить просмотр вкладок, а не внутри function()
:
...
def function():
# here is other code
...
# schedule the task to be executed in the main thread later
tabview.after(1, lambda: tabview.configure(state='normal'))
...
tabview = customtkinter.CTkTabview(..., state='disabled') # disable initially
...