您好我在Window7 OS上使用Python27,我正在尝试使用按钮创建一个Tk GUI,当按下按钮时,将出现一个文件目录。但是下面的代码不会做任何事情。我错过了什么吗?
import webbrowser
import Tkinter as Tk
def action(self):
webbrowser.open ('C:\AgmPlots')
win = Tk.Toplevel()
frame = Tk.Frame(master=win).grid(row=1, column=1)
button = Tk.Button(master=frame, text='press', command= lambda: action())
答案 0 :(得分:2)
你有三大问题。
首先,您永远不会启动GUI。你最后需要win.mainloop()
这样的东西来实际做任何事情。
其次,你的按钮实际上没有在框架内布局,所以你不会看到它。您需要button.pack()
。
最后,您的command
是一个调用action()
的函数,没有参数。但是你已经定义它需要一个参数。因此,单击它时会发生的一切是Tk将记录如下所示的回溯:
Exception in Tkinter callback
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1470, in __call__
return self.func(*args)
File "tkt.py", line 8, in <lambda>
button = Tk.Button(master=frame, text='press', command= lambda: action())
TypeError: action() takes exactly 1 argument (0 given)
要解决这个问题,要么不要将不必要的self
参数添加到action
(这是一个函数,而不是方法),要么显式传递一些虚拟对象以匹配{{1 }}
虽然我们在这里,lambda
与lambda: action()
本身完全相同,除了更冗长,更难阅读和更慢。你永远不应该在非原始字符串文字中使用未转义的反斜杠。我们不妨删除流浪空间和PEP8-ify所有内容以使其保持一致。
所以,把它们放在一起:
action