我正在尝试使用tkinter在python中创建一个简单的gui应用程序 . 有一个消息字段,一个条目和一个按钮 . 我正在尝试为按钮编写命令,该命令将条目中的文本发送到消息字段,然后清除条目 . 这是我的代码:
from tkinter import *
from tkinter.ttk import *
class window(Frame):
def __init__(self, parent):
messageStr="Hello and welcome to my incredible chat program its so awesome"
Frame.__init__(self, parent)
self.parent = parent
self.parent.title("Hello World")
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand="yes")
lfone = Frame(self)
lfone.pack(fill=BOTH, expand="yes")
myentry = Entry(self).pack(side=LEFT, fill=BOTH, expand="yes", padx=5)
messager = Message(lfone, text=messageStr, anchor=S+W, justify=LEFT).pack(fill=BOTH, expand="yes", padx=5, pady=5)
sendbutton = Button(self, text="Send", command=self.sendbuttoncommand).pack(side=RIGHT)
def sendbuttoncommand(*args):
messager.text = messager.text + myentry.get()
myentry.delete(first, last=None)
def main():
root = Tk()
root.geometry("300x200+300+300")
app=window(root)
root.mainloop()
if __name__ == '__main__':
main()
我尝试了sendbutton命令的一些变体,包括将它嵌套在def init 中,并将messager和我的条目更改为self.messager / myentry但是没有成功 . 就目前而言,当我尝试运行它时,我在messager上得到了一个名字错误 . 如何影响方法范围之外的变量?我希望避免在这种情况下使用全局变量 .
2 回答
在
sendbuttoncommand
方法中,未定义messager
,因为它仅在__init__
中本地定义 . 这就是造成NameError的原因 .如果要在
sendbuttoncommand
方法中重用messager
,只需在__init__
方法中通过调用self.messager
将其定义为self.messager
,使其成为实例的参数 .但是,我怀疑你之后会遇到其他错误 .
除了@JulienSpronock anwser之外,你需要知道写这篇文章:
myentry
,messager
和sendbutton
都是None
. 不要这样做 . 它应该是:原因是
pack()
(或grid()
)返回None
.