当前位置:   article > 正文

python tkinter子窗口,在Tkinter Python中将子窗口相对于父窗口放置

python 子窗口 在父窗口之上

I have a parent widget which contains a button. When the button is pressed I would like to open a borderless (i.e. no Windows decoration buttons) window directly underneath the parent widget aligned to the left hand side of it. I'm puzzled that the only way (it seems) of setting the position of a window is using .geometry() but worse, I can't seem to get the absolute coordinates of the parent widget - which I need for .geometry(), only the offsets from the parent's parent. So far my code is:

# 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)

This does pop up a window but relative to the desktop, not to the parent widget. It also seems to take no account of the border thickness and relief as far as I can see. Can anyone offer a way that this can be done? Is .geometry() the way to go or are there better ways?

解决方案

The short answer is, use winfo_rootx and winfo_rooty to get the coordinates relative to the screen. And yes, wm_geometry is the way to place a toplevel window precisely.

For example:

x = parentWgdt.winfo_rootx()

y = parentWgdt.winfo_rooty()

height = parentWgdt.winfo_height()

geom = "+%d+%d" % (x,y+height)

As a bit of friendly advice, I recommend against abbrev var nms. It makes the code hard to read, especially when the abbreviation is wrong (Wgdt should at least be Wdgt). The difference in code size between geom and geometry, and Wgdt and Widget are tiny, but the difference in readability is huge.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/892331
推荐阅读
相关标签
  

闽ICP备14008679号