这里的第一个问题,但是我已经回答了几个,所以希望这里有足够的信息供某人向我提供正确方向的指点。
我有以下代码,这些代码将构成我正在构建的应用程序的一部分。我希望用户能够输入其名称并评估一些图像,并使用滑块对其评分。为了定义图像的来源,我想使用filedialog.askdirectory
选择一个文件夹,以便用户可以验证包含图像的正确文件夹。
我已经删除了用于记录数据的按钮和功能,以简化此操作。
所以,我的问题是,当窗口弹出时,出现文件对话框,并允许我选择文件夹。不过,在选择之后,Entry
字段将无法选择以允许用户键入他们的姓名。如果通过Alt-tab或单击另一个窗口并返回来离开该窗口,则可以定位光标并照常进行-显然,这对于最终用户而言并不理想。
这是此处显示的文件对话框弹出窗口:
第二个窗口不会自动聚焦:
import tkinter as tk
from tkinter import filedialog
import numpy as np
class Model:
def __init__(self):
self.scores = []
self.position = 0
self.first_name = ""
self.last_name = ""
class WelcomeWindow:
def __init__(self, master):
button_width=25
button_height=10
self.master = master
self.frame = tk.Frame(self.master)
#self.file_dialog = tk.Frame(self.master)
self.directory = filedialog.askdirectory(parent=self.master)
self.canvas = tk.Canvas(self.frame,
height=600,
width=800
)
self.model = Model()
self.first_name_entry = tk.Entry(self.frame)
self.last_name_entry = tk.Entry(self.frame)
self.slider = tk.Scale(self.frame,
length=button_width * 20,
width=button_width * 2,
sliderlength=150,
showvalue=False,
from_=-3.00,
to=3.00,
orient="horizontal",
tickinterval=1,
label="Here is a slider",
resolution=0.01
)
self.frame.pack()
self.first_name_entry.pack()
self.last_name_entry.pack()
self.canvas.pack()
self.slider.pack()
def main():
root = tk.Tk()
win = WelcomeWindow(root)
root.mainloop()
main()
我尝试将takefocus
和frame
字段的first_name_entry
选项设置为True
,但没有成功。我还尝试将self.directory
的父级调整为self.frame
,这完全消除了我与主窗口进行交互的能力。
如果我遗漏了任何内容,请发表评论,我会提供一切
答案 0 :(得分:3)
在Windows系统上存在一个已知问题,即在mainloop第一次有机会完全循环之前就使用filedialog引起这种焦点问题。
最初,我使用after()
解决了此类问题,计划将文件对话安排在第一个循环完成后的某个时间发生,但是感谢fhdrsdg's评论,有一种更简单的方法可以使用{{1 }}。
在这里,您的代码经过了重新设计以解决焦点问题和一些常规清理工作。
update_idletasks()