我在这里看了一些其他的答案,但我不明白该怎么做。这是我想出的最好的。
为了消除偏离主题的评论,我更喜欢网格覆盖,我也喜欢widget.configure的处理方式,因此每行代码都可以完成一个逻辑事务。
在代码的最后,我有self.root.update()我也离开了自我。没有运气。
from tkinter import *
class Application:
def __init__(self, master):
frame1 = Frame(master)
frame1.grid(row=1, column=1)
self.btnQuit = Button(frame1)
self.btnQuit.configure(text="QUIT")
self.btnQuit.configure(fg="red")
self.btnQuit.configure(command=frame1.quit)
self.btnQuit.grid(row=1, column=1)
self.btnHi = Button(frame1)
self.btnHi.configure(text="hi there")
self.btnHi.configure(command="self.hello")
self.btnHi.grid(row=2, column=1)
self.lblMessage = Label(frame1)
self.lblMessage.grid(row=2, column=2)
def hello(self):
self.lblMessage.configure(text="hello there")
self.root.update()
root = Tk()
program = Application(root)
root.mainloop()
答案 0 :(得分:2)
如上所述:
self.btnHi.configure(command="self.hello")
应该是:
self.btnHi.configure(command=self.hello)
并注意线条的缩进。但是:
self.v = StringVar()
self.lblMessage = Label(frame1, textvariable=self.v)
在你的hello方法中,使用:
self.v.set("hello there")
答案 1 :(得分:1)
command
选项提供一个可调用的对象 - 而不是一个字符串eval
'd(无论如何它都不会起作用,因为它的范围非常不同,例如没有/不同的self
)。 http://infohost.nmt.edu/tcc/help/pubs/tkinter/button.html似乎证实了这一点。hello
内定义本地函数__init__
,而不是在类级别(作为方法)定义它。您需要从def hello
答案 2 :(得分:0)
我不清楚你要做什么,但如果你想在创建后更改Label的内容,那么你需要使用StringVar()对象。将其设置为Label的textvariable参数(在其构造函数中)将意味着只要更新StringVar的值(使用其set()方法),Label就会更新。
答案 3 :(得分:0)
请试试这个:
from tkinter import *
class Application:
def __init__(self, master):
frame1 = Frame(master)
frame1.grid(row=1, column=1)
self.btnQuit = Button(frame1)
self.btnQuit.configure(text="QUIT")
self.btnQuit.configure(fg="red")
self.btnQuit.configure(command=frame1.quit)
self.btnQuit.grid(row=1, column=1)
self.btnHi = Button(frame1)
self.btnHi.configure(text="hi there")
self.btnHi.configure(command=self.hello)
self.btnHi.grid(row=2, column=1)
self.lblMessage = Label(frame1)
self.lblMessage.grid(row=2, column=2)
def hello(self):
self.lblMessage.configure(text="hello there")
self.root.update()
root = Tk()`enter code here`
program = Application(root)
root.mainloop()