Управление Customtkinter из потока

Я хочу деактивировать и активировать кнопки 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 подходит для начинающих программистов благодаря своей простоте и читаемости кода.


51
1

Ответ:

Решено

Как вы уже знаете, проблема деформации связана с тем, что обновление выполняется в дочернем потоке, поэтому вместо этого вы можете выполнить обновление в основном потоке, используя .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
...