尝试在画布上实现按钮,该按钮在.pdf
单击时会打开文件。
我的尝试如下
self.B3 = Button(InputFrame,text='Graphical Plots', command = os.startfile('Bessel.pdf'),bd=5,width=13,font="14")
self.B3.grid(column =0,row=3)
不幸的是,我的代码.pdf
在我单击按钮之前就打开了该文件,该文件已运行。为什么?
当Python处理这两行时,它会在第一行看到这一点:
os.startfile('Bessel.pdf')
并将其解释为有效的函数调用。因此,它调用了该函数。
要解决此问题,请定义一个函数来处理该行之前的click事件,然后将按钮的command
opion分配给该函数:
def handler():
# The code in here is "hidden"
# It will only run when the function is called (the button is clicked)
os.startfile('Bessel.pdf')
self.B3 = Button(InputFrame, text='Graphical Plots', command=handler, bd=5, width=13, font="14")
或者,在这种情况下,甚至更好/更干净的方法是使用lambda
(匿名函数):
self.B3 = Button(InputFrame, text='Graphical Plots', command=lambda: os.startfile('Bessel.pdf'), bd=5, width=13, font="14")
或者,就像@JFSebastian指出的那样,您可以使用functools.partial
:
self.B3 = Button(InputFrame, text='Graphical Plots', command=functools.partial(os.startfile, "Bessel.pdf"), bd=5, width=13, font="14")
请注意,您必须先导入functools
。
问题内容: 我有2个按钮,分别名为“ ButtonA”,“ ButtonB”。如果要单击任何按钮,我希望程序打印“ hello,ButtonA”和“hello,ButtonB”。我的代码如下: 当我单击ButtonA时,会发生错误。 我理解此错误,但是如何将ButtonA的文本传递给lambda? 问题答案: 这应该工作: 有关更多信息,请查看Tkinter回调
问题内容: 我不断收到以下错误:AttributeError:’NoneType’对象没有属性’configure’ 问题答案: 执行时,分配给该命令的结果是命令的结果, 而不是 对创建的对象的引用。 您需要在打包/网格化之前分配变量。它看起来应该像这样:
问题内容: 我正在尝试创建一些按钮(带有for),如下所示: 并且每个按钮都有自己的参数(Test得到Test和Test2得到Test2),但是当我按下按钮时,它们都打印“ Test2”,这意味着它们使用具有相同参数的相同功能。 我该如何解决? 问题答案: 问题是你的lamba在for循环中。你的lambda正在使用该name变量,但是name每次通过for循环都会重新分配该变量。因此,最后,所有
我有一个程序,它每秒钟响一次,直到停止。问题是,在我按下“开始”并发出嘟嘟声后,我无法单击“停止”按钮,因为窗口冻结。欢迎任何帮助。
问题内容: 我正在尝试制作一个构建检索表单,似乎按钮有问题…我是Python / tkinter GUI编程(和一般的GUI编程)的新手,并借用了Hello World应用程序的框架,并以此为基础。 在下面的代码中,我将“浏览”按钮的“命令”选项设置为在单击类时调用类的内部get_dir()函数。但是,一旦我尝试运行该应用程序,就会调用get_dir()函数,并提示我选择一个目录。有什么想法为什么
我试图在一个for循环中创建按钮。在每个循环中,将i计数值作为命令值中的参数传递出去。因此,当从命令值调用函数时,我可以判断哪个按钮被按下并相应地操作。问题是,假设len是3,它将创建3个按钮,标题为“游戏1”到“游戏3”,但是当按下任何一个按钮时,打印值总是2,最后一次迭代。所以看起来按钮是作为单独的实体制作的,但是命令参数中的i值似乎都是一样的。下面是代码: 有没有办法在每次迭代时获取当前的i