【发布时间】:2014-05-26 23:14:57
【问题描述】:
我想制作一个按钮,允许用户浏览和选择一个文件并将选择分配给一个变量,这就是我所拥有的,我知道这是错误的,但我似乎无法得到有效的东西,拜托给我一些改进的建议,谢谢。
import tkinter
#Window
window = tkinter.Tk()
window.title("Title")
window.geometry("300x400")
#Label
fileSelectLBL = tkinter.Label(window, text="Please select your file:")
fileSelectLBL.pack()
#Button
filename = tkinter.Button(window, text="Browse", command = askopenfilename( filetypes = (("Text Files","*.txt"))))
filename.pack()
#Main Loop
windowindow.mainloop()
运行时出现此错误:
filename = Button(window, text="Browse", command = window.load_file, width = 10)
File "/usr/lib/python3.4/tkinter/__init__.py", line 1886, in __getattr__
return getattr(self.tk, attr)
AttributeError: 'tkapp' object has no attribute 'load_file'
单击按钮时出现此错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.4/idlelib/run.py", line 121, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "/usr/lib/python3.4/queue.py", line 175, in get
raise Empty
queue.Empty
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
return self.func(*args)
TypeError: load_file() missing 1 required positional argument: 'self'
我已将其更新为:
import tkinter
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
from tkinter import filedialog
#Window
window = tkinter.Tk()
window.title("Title")
window.geometry("300x400")
def load_file():
fname = askopenfilename(filetypes=(("Template files", "*.tplate"),
("HTML files", "*.html;*.htm"),
("All files", "*.*") ))
if fname:
try:
print("""here it comes: self.settings["template"].set(fname)""")
except: # <- naked except is a bad idea
showerror("Open Source File", "Failed to read file\n'%s'" % fname)
return
window.button = Button(window, text="Browse", command=load_file(), width=10)
#Label
fileSelectLBL = tkinter.Label(window, text="Please select your file:")
fileSelectLBL.pack()
#Button
def load_file(self):
fname = askopenfilename(filetypes=(("Text files", "*.txt"),
("All files", "*.*") ))
filename = tkinter.Button(window, text="Browse", command = load_file)
filename.pack()
filename = Button(window, text="Browse", command = window.load_file, width = 10)
#Main Loop
windowindow.mainloop()
现在这会打开文件对话框,但它会在程序运行后立即打开,我希望它仅在按下浏览按钮时运行,我该如何解决这个问题?
【问题讨论】:
-
askopenfilename没有在任何地方定义(我可以看到)。是tkinter函数吗? -
@dilbert 我以为是,这是我在运行它时遇到的错误` filename = Button(window, text="Browse", command = window.load_file, width = 10) File " /usr/lib/python3.4/tkinter/__init__.py", line 1886, in getattr return getattr(self.tk, attr) AttributeError: 'tkapp' object has no attribute 'load_file'`
-
@dilbert 我已经用错误更新了问题
-
我有 Python2.7 的有效解决方案,但 Python3.4 没有。
-
错误回溯与您粘贴的代码不匹配。
标签: python user-interface tkinter