gpt4 book ai didi

python - 在Tkinter python中相对于父窗口放置子窗口

转载 作者:太空狗 更新时间:2023-10-30 03:05:42 25 4
gpt4 key购买 nike

我有一个包含按钮的父部件。当按下按钮时,我想打开一个无边框(即没有 Windows 装饰按钮)窗口,它位于父窗口小部件的正下方,与它的左侧对齐。我很困惑,设置窗口位置的唯一方法(似乎)是使用 .geometry() 但更糟糕的是,我似乎无法获得父小部件的绝对坐标 -我需要 .geometry(),只有父项的父项的偏移量。到目前为止我的代码是:

# This is the child which appears when the button is pressed.
class ChildPopUpWindow(Frame):
def __init__(self, parentWgdt):
win = Toplevel(parentWgdt)
geom = str(parentWgdt.winfo_x()) + '+' + str(parentWgdt.winfo_y() + parentWgdt.winfo_height())
win.overrideredirect(1) # No win decoration.
win.bd = 10
win.relief = GROOVE
win.geometry( geom )
Frame.__init__(self, win)
# etc. etc.

# ... and this is the handler for the button being pressed.
def onDropDown(self):
popUp = ChildPopUpWindow(self)

这确实会弹出一个窗口,但相对于桌面,而不是父窗口小部件。据我所知,它似乎也没有考虑边界厚度和浮雕。任何人都可以提供一种可以做到这一点的方法吗? .geometry() 是要走的路还是有更好的方法?

最佳答案

简短的回答是,使用winfo_rootxwinfo_rooty 获取相对于屏幕的坐标。是的,wm_geometry 是精确放置顶层窗口的方法。

例如:

    x = parentWgdt.winfo_rootx()
y = parentWgdt.winfo_rooty()
height = parentWgdt.winfo_height()
geom = "+%d+%d" % (x,y+height)

作为一个友善的建议,我建议不要使用 abbrev var nms。它使代码难以阅读,尤其是缩写错误时(Wgdt 至少应该是 Wdgt)。 geomgeometryWgdtWidget在代码量上的差别很小,但是可读性上的差别很大。

关于python - 在Tkinter python中相对于父窗口放置子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156766/

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