为什么我的按钮不会在python上的tkinter GUI上重复命令
我是GUI和类的新手,有点困惑,当我在tkinter for python中使用一个按钮时,它应该在按下时重复它的命令。但在我的程序中,它不这样做。我的代码有什么问题吗?我正在尝试制作一个简单的程序,它可以响应键入的任何内容 -谢谢为什么我的按钮不会在python上的tkinter GUI上重复命令,python,user-interface,tkinter,Python,User Interface,Tkinter,我是GUI和类的新手,有点困惑,当我在tkinter for python中使用一个按钮时,它应该在按下时重复它的命令。但在我的程序中,它不这样做。我的代码有什么问题吗?我正在尝试制作一个简单的程序,它可以响应键入的任何内容 -谢谢 from Tkinter import * from PIL import Image, ImageTk import tkMessageBox class appsMain(Frame): def __init__(self,parent):
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()
您的代码有一些问题。第一个问题很容易解决:
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"))
(这相当于):
但是,我不知道你是否想不断添加不同的消息。。。或者他们来自哪里,所以在这一点上很难给出一个通用的解决方案
即使在引发异常之后,Tkinter应用程序也会继续运行。在开发Tkinter应用程序时,最好观察终端是否存在异常(在本例中,它正好指出了问题的根源)。您的代码有一些问题。第一个问题很容易解决:
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"))
(这相当于):
但是,我不知道你是否想不断添加不同的消息。。。或者他们来自哪里,所以在这一点上很难给出一个通用的解决方案
即使在引发异常之后,Tkinter应用程序也会继续运行。在开发Tkinter应用程序时,最好观察终端是否存在异常(在本例中,它正好指出了问题的根源)。这是为了更好地回答您的Lambda注释问题。Lambda是一种快速、单行程序的函数编写方法。将其设置为的变量与def myFunction的函数名相同。然后你说关键字lambda和你放在关键字lambda后面的字母/单词就是你函数的参数。接下来放一个冒号(就像普通函数->def myFunction:)一样)。然后,编写希望函数返回的任何内容。因此,如果您想要一个函数对给定的数字进行平方运算,n,那么您通常可以这样编写:
def square_num(n):
return n**2
或者作为一个酷的羔羊:
square_num = lambda n: n**2
您还可以拥有任意多个参数,就像在普通函数中一样,因此对于给定的x次幂,您可以写入:
raise_num = lambda n, x: n**x
这是为了更好地回答您的Lambda评论问题。Lambda是一种快速、单行程序的函数编写方法。将其设置为的变量与def myFunction的函数名相同。然后你说关键字lambda和你放在关键字lambda后面的字母/单词就是你函数的参数。接下来放一个冒号(就像普通函数->def myFunction:)一样)。然后,编写希望函数返回的任何内容。因此,如果您想要一个函数对给定的数字进行平方运算,n,那么您通常可以这样编写:
def square_num(n):
return n**2
或者作为一个酷的羔羊:
square_num = lambda n: n**2
您还可以拥有任意多个参数,就像在普通函数中一样,因此对于给定的x次幂,您可以写入:
raise_num = lambda n, x: n**x
非常感谢。你能准确地解释什么是lambda吗?有一天它可能会有用。@TommyLi Duong——Lambda是一种不使用
def
创建函数的方法f=lambda x:x**2
--f
是一个函数,它可以对传递给它的任何东西进行平方运算。我会更新帖子,让它更清楚一点。更多信息和链接()谢谢!你能准确地解释什么是lambda吗?有一天它可能会有用。@TommyLi Duong——Lambda是一种不使用def
创建函数的方法f=lambda x:x**2
--f
是一个函数,它可以对传递给它的任何东西进行平方运算。我会更新帖子,让它更清楚一点。更多信息和链接()