Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的按钮不会在python上的tkinter GUI上重复命令_Python_User Interface_Tkinter - Fatal编程技术网

为什么我的按钮不会在python上的tkinter GUI上重复命令

为什么我的按钮不会在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):

我是GUI和类的新手,有点困惑,当我在tkinter for python中使用一个按钮时,它应该在按下时重复它的命令。但在我的程序中,它不这样做。我的代码有什么问题吗?我正在尝试制作一个简单的程序,它可以响应键入的任何内容

-谢谢

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
是一个函数,它可以对传递给它的任何东西进行平方运算。我会更新帖子,让它更清楚一点。更多信息和链接()