Tkinter - 在使用任何小部件之前最大化和最小化窗口会隐藏这些小部件

5

这是我编写的代码。正如您所看到的,它有一个按钮,当单击该按钮时,会打开一个 Text,可以在其中输入内容。它有效,如果您单击按钮,则窗口会调整大小。
但是我注意到,如果我在启动程序后立即最大化和最小化窗口(即我做的第一件事情是最大化和最小化窗口),那么窗口不会调整大小以适应整个框架(单击按钮时)并且我的小部件会被隐藏。

from tkinter import *

def Home():
    global homeP
    homeP = Tk()
    homeP.title('Grades')

    enterButton = Button(homeP, text='Enter Grades', bg='blue', fg='white', command=enterG)
    enterButton.grid(row=1, column=0, padx=(5,5), pady=(5,2), sticky="e")

    homeP.mainloop()

curFrame = ''

def enterG():
    global homeP
    global eGrade
    global curFrame

    if curFrame == 'e':
        return
    if 'eGrade' not in globals(): #Prevent frames from stacking up on one another
        eGrade = Frame(homeP)
        enterGrades = Text(eGrade, width=64, height=10)
        enterGrades.grid(row=0, column=0)

        eGrade.grid(row=2, column=0, columnspan=2, padx=(10,10), pady=(1,5))
    else:
        eGrade.grid(row=2, column=0, columnspan=2, padx=(10,10), pady=(1,5))
    curFrame = 'e'

    # for name, value in globals().copy().items():
    #   print(name, value)
Home()

任何帮助说明为什么会发生这种情况以及我如何防止这种情况发生?

我曾经遇到过同样的问题,但是通过不同的方式解决了。我可以向您展示吗? - Ghantey
当我遇到相同的情况时,我只是这样做:**text = scrollbar.ScrolledText(master=root, wrap=WORD, width=1366, height=768).pack()**。我已经将宽度和高度改为最大值,解决了我的问题。这是完整的代码:https://pastebin.com/9zW7hPAu - Ghantey
@markkeven 好的,我猜这是一个黑客技巧。这将使我的代码依赖于系统。不是吗?我想避免这种情况,因为有些系统的屏幕小于15.6英寸。 - Miraj50
哦,是的,那个我没想到。 - Ghantey
1个回答

1
如果您在单击按钮之前手动调整窗口大小,将遇到完全相同的问题。问题与最大化/最小化本身无关,而与用户已经表示“我希望窗口是这个大小”,并且Tkinter试图通过不违背用户的意愿来尊重这一点有关。
解决方案是在添加或删除小部件之前重置窗口的大小。在enterG中的全局语句之后添加以下代码行:
homeP.geometry("")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接