在窗口大小变化时定位窗口



我想做的是将窗口保持在屏幕的右上角。当您浏览不同的选项时,窗口会根据显示的内容更改大小。所以我需要一些东西来检查窗口的当前大小,然后根据其大小定位它。

我的代码:

from tkinter import *
class Main:
    def __init__(self, master):
        self.master = master
        self.win_1()
    def win_1(self):
        for child in self.master.winfo_children():
            child.destroy()
        Text(self.master, width = 10, height = 3).grid(columnspan = 2)
        Button(self.master, text = 'Win 2', width = 7, command = self.win_2).grid(row = 2, column = 0)
        Button(self.master, text = 'Exit', width = 7, command = self.master.destroy).grid(row = 2, column = 1)    
        self.position_win()
    def win_2(self):
        for child in self.master.winfo_children():
            child.destroy()
        Text(self.master, width = 20, height = 10).grid()
        Button(self.master, text = 'Win 1', command = self.win_1).grid()
        self.position_win()
    def position_win(self):
        self.h = self.master.winfo_height()
        self.w = self.master.winfo_width()
        self.master.geometry('-%d+%d' % (self.w, self.h))

root = Tk()
Main(root)
root.mainloop()

这是我能想到的实现目标的最好的办法。当我运行这个时,窗口开始完美地放置在右上角。单击该按钮时,窗口 2 的右上角将设置在窗口 1 的左下角。然后,当您单击返回窗口 1 时,它会将右上角设置为与窗口 2 中相同的位置。从这一点开始,窗口之间的循环从窗口的右上角开始,但窗口不在屏幕的右上角。我敢肯定这很清楚,但如果你运行代码,你会看到我在说什么。

它为什么要这样做,我该如何解决?

谢谢!

你的程序正在做你告诉它做的事情。 引用 http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/geometry.html"如果下一部分的格式为+x,则指定窗口左侧应为距桌面左侧的x像素。如果它的表单为 -x,则窗口右侧距离桌面右侧 x 像素。">

所以你告诉tk把窗口的宽度放在远离右边缘的地方。 垂直位置也是如此。 唯一的"谜团"是为什么它第一次出现在角落里。 原因是self.master.geometry()最初是1x1+0+0的,不受电网操作的影响。 如果您希望窗口位于常量位置,请将其放在带有 self.master.geometry('-0+0')__init__ 方法中的所需位置,并删除 position 方法和调用。

注意:创建和销毁小部件的另一种方法是创建两个框架,然后通过grid_forget一个框架和grid另一个框架进行切换。 或者网格化两者,并在顶部抬起您想要的那个。 后者使窗户足够大,可以容纳两者。

最新更新