Tkinter - Удалить и установить границу виджета - PullRequest
0 голосов
/ 13 октября 2019

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

Вот то, что я пробовал, но как только граница становится красной, она никогда не стирается в начале обратного вызова.


from tkinter import *
import time



class GUI:

    def __init__(self, master):
        self.cnt = 0;
        self.master = master
        self.test_button = Button(self.master, command=self.tb_click)
        self.test_button.configure(
            text="Calc", background="Grey",
            padx=50
            )
        self.test_button.pack(side=TOP)

        self.test_text = Text(self.master)
        self.test_text.configure(background ="White",height = 2, width = 15)
        self.test_text.pack(side=TOP)



    def tb_click(self):
        self.test_text.configure(highlightthickness = 0)

        self.cnt += 1
        time.sleep(3) #simulate long running process

        if(self.cnt>1): #check result of long running process
            self.test_text.configure(highlightbackground = "red")
            self.test_text.configure(highlightthickness = 4)



root = Tk()
root.title("Test Border")
main_ui = GUI(root)
root.mainloop()

1 Ответ

0 голосов
/ 14 октября 2019

Когда вы нажимаете кнопку, тогда mainloop() запускает вашу функцию и ждет до конца вашей функции, а затем перерисовывает окно и все виджеты в окне. Таким образом, он должен перерисовать его только один раз для всех изменений. Это требует меньше времени и окно не мигает.

Но с помощью root.update() вы можете заставить mainloop() перерисовать окно раньше

self.test_text.configure(highlightthickness=0)
root.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...