繁体   English   中英

如何在python Tkinter中使用lambda将Entry.get设置为命令函数的参数

[英]How to set Entry.get as an argument of a command function with lambda in python Tkinter

我有一个具有输入字段和按钮的应用程序:

    from subprocess import *
    from Tkinter import *


    def remoteFunc(hostname):
            command = 'mstsc -v {}'.format(hostname)
            runCommand = call(command, shell = True)
            return

    app = Tk()
    app.title('My App')
    app.geometry('200x50+200+50')

    remoteEntry = Entry(app)
    remoteEntry.grid()

    remoteCommand = lambda x: remoteFunc(remoteEntry.get()) #First Option
    remoteCommand = lambda: remoteFunc(remoteEntry.get()) #Second Option

    remoteButton = Button(app, text = 'Remote', command = remoteCommand)
    remoteButton.grid()

    app.bind('<Return>', remoteCommand)

    app.mainloop()

我希望当我在输入字段中插入IP /计算机名称时,它将作为参数发送给按钮命令,因此当我按Return或按按钮时,它将使用该名称/ IP远程计算机。

当我使用第一个选项执行此代码(查看代码)时,它仅在按回车键时有效,如果按按钮,则为错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1532, in __call__
return self.func(*args)
TypeError: <lambda>() takes exactly 1 argument (0 given)

如果仅在尝试按按钮时尝试remoteCommand的第二个选项,但它有效,但是如果按Return键,则会出现此错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1532, in __call__
return self.func(*args)
TypeError: <lambda>() takes no arguments (1 given)

两者之间的唯一区别是lambda是否获得参数。

我认为最好的解决方案是不使用lambda。 IMO,应避免使用lambda,除非它确实是解决问题的最佳解决方案,例如何时需要创建闭合。

由于您希望通过返回键上的绑定以及单击按钮来调用相同的函数,因此编写一个可以选择接受事件的函数,然后将其忽略:

例如:

def runRemoteFunc(event=None):
    hostname = remoteEntry.get()
    remoteFunc(hostname)
...
remoteButton = Button(..., command = remoteFunc)
...
app.bind('<Return>', remoteCommand)

命令不获取参数。 事件处理程序将事件作为参数。 要同时使用函数,请使用默认参数。

def remote(event=None):
     remoteFunc(remoteEntry.get())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM