首页 > 解决方案 > 这是 Tkinter 中的错误吗?

问题描述

我发现 Tkinter 小部件聚焦行为有一个非常特殊的行为。以下面的代码为例:

import tkinter as tk

class Test(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        # Create Canvas
        canvas_width = master.winfo_screenwidth()
        canvas_height = master.winfo_screenheight()
        self.canvas = tk.Canvas(master, width=canvas_width, height=canvas_height)
        self.canvas.pack()


root = tk.Tk()
frame = Test(root)
frame.pack()

while True:
    frame.focus_set()
    print(root.focus_get())
    root.update_idletasks()
    root.update()

print(root.focus_get())倒数第三行在循环的每个交互中输出,.这很奇怪。你会期望它输出类似.!frame. 它变得更奇怪了,因为如果您将画布的高度更改height=500为:

self.canvas = tk.Canvas(master, width=canvas_width, height=500)

它工作得很好并且输出.!frame。我继续对此进行试验,我发现设置height=1176及以下工作正常,但所有height=1177及以上的值最终在输出中变为.. 我怀疑这与我的分辨率有关,但是无论我将宽度设置多高,它都不会像我提高高度时那样引发问题。我的决定1920x1200只是以防万一。对这种奇怪的行为有什么想法吗?

标签: pythontkinter

解决方案


推荐阅读