gpt4 book ai didi

python - tkinter askopenfilename doubleclick 将事件传递给父级

转载 作者:可可西里 更新时间:2023-11-01 10:43:59 26 4
gpt4 key购买 nike

我有这个简单的行为示例:

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 上工作。

最佳答案

这似乎是 tk 的一个已知问题: https://core.tcl.tk/tk/tktview?name=faf37bd379

该票证说该问题已在 tk 8.6.8 中修复。

我在使用 tk 8.6 时遇到了这个问题,更新不是一个很好的选择,所以我试图找到一些其他的解决方法。我尝试禁用按钮然后启用它们,但在启用按钮后才发生红色点击。我还尝试在再次启用按钮之前添加延迟,但这也没有用。

我发现实际有效的两个解决方法是:1) 将按钮更改为需要双击。这可以通过绑定(bind)来完成。我个人不喜欢必须双击按钮,但也许其他人不那么挑剔。2) 将文件选择更改为带有所选目录中文件列表的组合框。可以使用 askdirectory 代替 askopenfilename 选择目录。 askdirectory 要求用户单击“选择文件夹”按钮,因此双击时不会出现同样的问题。

关于python - tkinter askopenfilename doubleclick 将事件传递给父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com