我是GUI和类的新手,我只是有点困惑,当我在tkinter中使用一个用于python的按钮时,它假设在按下时重复它的命令。但是在我的程序中它并没有这样做。我的代码有什么问题可以解决它吗?我正在尝试创建一个简单的程序来回显输入的内容。
-Thanks
from Tkinter import *
from PIL import Image, ImageTk
import tkMessageBox
class appsMain(Frame):
def __init__(self,parent):
Frame.__init__(self,parent)
self.parent=parent
self.initUI()
def initUI(self):
self.parent.title("OrganizedWindows")
self.send=Text(self,bg="white",height=3,width=35)
self.send.place(x=17,y=235)
self.msg=Text(self,width=35,height=12,state="disable")
self.msg.place(x=17,y=20)
sendbtn=Button(self,text=" Listen ",command=self.accept)
sendbtn.place(x=305,y=240)
self.pack(fill=BOTH, expand=1)
def accept(self,msg):
self.msg.configure(state="normal")
self.msg.insert(INSERT,msg+"\n")
self.msg.insert(INSERT,"BYE")
self.msg.configure(state="disable")
root=Tk()
root.geometry("350x300+300+300")
app=appsMain(root)
root.mainloop()
答案 0 :(得分:3)
您的代码存在一些问题。第一个很容易解决:
sendbtn=Button(self,text=" Listen ",command=self.accept)
不起作用,因为单击按钮时,调用self.accept
时没有其他参数(accept
需要2个参数,[self
和msg
],但是它只获得1 [self
])。
您可以使用lambda
:
sendbtn=Button(self,text=" Listen ",command=lambda : self.accept("some message here"))
(相当于):
def func:
self.accept("some message here")
sendbtn=Button(self,text=" Listen ",command=func)
但是,我不知道你是否想要不断添加不同的消息......或者它们来自哪里,所以现在很难给出一般的解决方案。
即使在引发异常后,Tkinter应用程序仍然可以继续运行。在开发Tkinter应用程序时,最好在终端上查看异常(在这种情况下,它指出了问题的根源)。
答案 1 :(得分:0)
这是为了更好地回答您的Lambda评论问题。 Lambda是一种快速,单行编写函数的方法。您设置的变量与 def myFunction 的函数名称相同。然后你说关键字 lambda 和你在关键字lambda之后放置的字母/单词只是你函数的参数。接下来你放一个冒号(就像你正常的函数 - > def myFunction :)。之后,您可以将您想要的功能写入返回。因此,如果你想要一个函数来对正确的数字 n 进行平方,那么你可以正常地写它:
def square_num(n):
return n**2
或者作为一个很酷的Lambda:
square_num = lambda n: n**2
您也可以拥有任意数量的参数,就像在普通函数中一样,所以对于给定的数字,你可以编写x值:
raise_num = lambda n, x: n**x