我无法更改标签的文本

I cannot change the text of a Label

我正在尝试获取 GUI 程序的代码。我做了一个简单的测试,我无法更改 GUI 上的文本值,没有错误,也没有任何反应。 Tkinter?

mainloop 有一些问题

serial.py:

import gui
gui.chiplabel.config(text="A.3f V" )

gui.py:

from Tkinter import *
root = Tk()
chiplabel = Label(root, relief=RIDGE,  width = 9 , text ="Unknown",
                  padx=0, pady=0).grid(row = 0,column=5, sticky =W)
root.mainloop()

一种方法是在 class 中创建 UI,例如:

import Tkinter as tk  # note don't use wildcard imports

class GUI(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.chiplabel = tk.Label(
            self,
            padx=0,
            pady=0,
            relief=tk.RIDGE,
            text="Unknown",
            width=9,
        )  # note alphabetical order and consistent spacing
        self.chiplabel.grid(
            column=5, 
            row=0, 
            sticky=tk.W,
        )  # note grid is separate step

并且不要 运行 它就地,这样您就可以 import class 而无需 运行 任何东西。那么你的 serial.py 看起来更像是:

from gui import GUI

interface = GUI()

interface.chiplabel.config(text="A.3f V")

interface.mainloop()

如果你想要多帧,你可以做类似Switching between frames in tkinter menu的事情。

您的代码有两个主要问题。它需要重组,您在布置小部件时犯了一个非常常见的错误。

组织代码

按照您组织代码的方式,您对 configure 的调用发生在 mainloop 退出之后,并且在小部件被销毁之后。您需要重新组织代码,以便对 mainloop 的调用是执行的最后一行代码。

在我看来,这最好通过使用 类 和对象来实现,但这并不是绝对必要的。调用 mainloop.

后,您只需要没有任何代码

布置小部件

问题出在这一行:

chiplabel = Label( root, relief=RIDGE,  width = 9 , text ="Unknown",  padx=0, pady=0).grid(row = 0,column=5, sticky =W)

在python中,当你做x=y().z()时,x被赋予z()的值。因此,当您执行 chiplabel = Label(...).grid(...) 时,chiplabel 被赋予 grid(...) 的值。网格总是 returns None,所以 chiplabel 总是 None。因此,您无法重新配置它,因为您丢失了对小部件的引用。

解决方法是分两步创建小部件和布置小部件。