如何使用按钮命令(TkInter)使用os.startfile

时间:2013-12-13 00:14:43

标签: python tkinter

尝试在画布上实现一个按钮,在单击时打开.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文件,只要它一直运行。为什么?

1 个答案:

答案 0 :(得分:4)

当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")

或者,正如@ J.F.Sebastian所说,你可以使用functools.partial

self.B3 = Button(InputFrame, text='Graphical Plots', command=functools.partial(os.startfile, "Bessel.pdf"), bd=5, width=13, font="14")

请注意,您必须先导入functools