【问题标题】:How to trigger changes in button in a comand in Tkinter?如何在 Tkinter 的命令中触发按钮的更改?
【发布时间】:2019-10-06 01:46:06
【问题描述】:

我是TKinter 的新手。我需要在点击时更改button 及其state 的文本,然后执行一些操作,最后再次更改其文本和状态。

问题是更改仅在函数结束后应用,跳过状态和文本的第一次更改。它永远不会将Buttons 文本更改为“正在加载”,并且该按钮永远不会被禁用。

这是我遇到的问题的代码:

#!/usr/bin/env python
import tkinter as tk
import time


class Application(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack(fill=tk.BOTH, expand=1)
        self.create_widgets()

    def create_widgets(self):
        self.master.title("CW POS")

        cierre = tk.Button(
            self.master,
            command=self.re_imprimir_ultimo_cierre)

        cierre["text"] = "foo"
        cierre.pack(fill=tk.BOTH, expand=1)
        self._cierre = cierre

        salir = tk.Button(self.master, text="quit", command=self.salir)
        salir.pack(fill=tk.BOTH, expand=1)


    def salir(self):
        exit()

    def re_imprimir_ultimo_cierre(self):
        self._cierre["text"] = "Loading..."
        self._cierre["state"] = tk.DISABLED

        # TODO: magic
        time.sleep(2)

        self._cierre["text"] = "foo"
        self._cierre["state"] = tk.NORMAL



root = tk.Tk()
root.geometry("240x180")
root.resizable(False, False)
app = Application(root)
root.mainloop()

如何让按钮显示text="loading"state=DISABLED,同时按钮进行我的计算?

【问题讨论】:

    标签: python python-3.x user-interface tkinter tk


    【解决方案1】:

    这个问题有一个非常快速的解决方法,您只需更新按钮,将其文本更改为“正在加载”(self._cierre["text"] = "Loading...")

        def re_imprimir_ultimo_cierre(self):
            self._cierre["text"] = "Loading..."
            self._cierre["state"] = tk.DISABLED
    
            self._cierre.update() # This is the line I added
    
            # TODO: magic
            time.sleep(2)
    
            self._cierre["text"] = "foo"
            self._cierre["state"] = tk.NORMAL
    

    这只是在您更改文本和状态后简单地更新按钮状态。

    据我了解,这是因为按钮将在更新屏幕上的任何内容之前运行其命令中的所有代码,因此您基本上必须强制按钮在其命令中更新自身。

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多