簡體   English   中英

如何在不等待 tkinter Menu 命令功能完成的情況下更新 tkinter 標簽文本?

[英]How do I get tkinter label text to update without waiting for the tkinter Menu command function to finish?

我正在編寫一個練習 GUI 應用程序,幫助通過 adb 管理 android 應用程序。

但是我遇到了一個問題,直到從 tkinter 菜單調用的uninstall_package函數完成后,狀態欄才會更新。 即使我使用time.wait()而不是終端函數停止函數,也看不到第一個self.status_bar.text.set更改。

我遇到了這個相關的問題,但它沒有幫助解決它。 https://stackoverflow.com/a/32504779/6318164

這是腳本。 我已經排除了一些部分以最小化這篇文章以僅顯示問題的主要部分。

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('640x480')

        self.menu_bar = MenuBar(self)
        self.status_bar = StatusBar(self)
        self.tab = Tab(self)

    def uninstall_package(self):
        if self.tab.get_selected_name() == 'Third Party':
            # com.company.app
            package = self.tab.third_party.get_selected_items()[0]

            answer = messagebox.askyesno(
                title='Confirm',
                message='Uninstall package:\n{}'.format(package)
            )

            if not answer:
                return

            self.status_bar.text.set('Uninstalling {}...'.format(package))

            # function halts until the terminal process has finished
            process = terminal('adb uninstall {}'.format(package))
        
            if process.stdout:
                self.status_bar.text.set('Success')
            else:
                messagebox.showerror('An error occurred.')

            # other functions...

class MenuBar(tk.Menu):
    def __init__(self, master):
        super().__init__(master)

        action_menu = tk.Menu(self, tearoff=0)
        action_menu.add_command(label='Uninstall Selected Package', command=master.uninstall_package)

        self.add_cascade(label='Action', menu=action_menu)

        master.config(menu=self)

class StatusBar(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        self.text = tk.StringVar()
        self.text.set('Ready')

        label = tk.Label(self, anchor='w', bd=1, relief=tk.SUNKEN, textvariable=self.text)
        label.pack(fill='x')

        self.pack(side='bottom', fill='x')

第一個self.status_bar.text.set未顯示,但最后一個顯示。 終點站

您是否在設置狀態欄文本后嘗試過?

tk.update_idletasks()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM