【发布时间】:2023-04-06 17:24:01
【问题描述】:
我有这个简单的行为示例:
import tkinter as tk
from tkinter import filedialog, ttk
INITIALDIR = 'C:\\'
class MainWindow(ttk.Frame):
def __init__(self, root, *args, **kwargs):
super().__init__(root, *args, **kwargs)
self.pack()
btnoptions = {'expand':True, 'fill': 'both'}
btn = ttk.Button(self, text='Select', command=self.ask_openfile)
btn.pack(**btnoptions)
def ask_openfile(self):
self.file_opt = options = {}
options['initialdir'] = INITIALDIR
filename = filedialog.askopenfilename(**self.file_opt)
return filename
if __name__=='__main__':
root = tk.Tk()
root.geometry('600x300')
MainWindow(root).pack(expand=True, fill='both', side='top')
root.mainloop()
基本上有一个大按钮,可以打开一个打开文件对话框。如果我选择一个文件并按打开,它工作正常。但是,如果我双击选择一个文件,它会选择该文件,关闭对话框,然后立即打开一个新的打开文件对话框。我的猜测是,第二次单击以某种方式传递到底层窗口,然后再次单击按钮(按钮必须位于即将被选中的文件下)。有没有办法避免这种行为?看起来是 Windows 问题,在 Windows 7 和 10 上使用 python 3.5 进行了尝试。在 debian linux 上一切都很好,但是,我需要它才能在 Windows 上工作。
【问题讨论】:
-
如果您确实是第二次点击按钮,请禁用 ask_openfle() 中的按钮,即 state=DISABLED effbot.org/tkinterbook/button.htm 或 pack_forget() 将其删除。
-
这是什么版本的python?这是 Windows 平台上的一个错误,但几年前 IIRC 已修复。
-
在 Win10 上使用 3.5.1,从 IDLE 编辑器运行,我没有重新出现对话框。我添加了
print(filename)以确认该对话框的名称。我尝试了两次以确保我的双击速度足够快。 -
这是 Windows 10 上的 python 3.5.1(在 win7 上相同,具有相同的 python 版本(64 位和 32 位))从脚本运行,而不是从空闲状态运行。
-
尝试从空闲状态运行,结果完全一样。而且我不需要快速双击“非常”,正常双击就足以获得这种行为。
标签: python windows python-3.x tkinter