我无法更改标签的文本
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
。因此,您无法重新配置它,因为您丢失了对小部件的引用。
解决方法是分两步创建小部件和布置小部件。
我正在尝试获取 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
。因此,您无法重新配置它,因为您丢失了对小部件的引用。
解决方法是分两步创建小部件和布置小部件。