我有一個包含按鈕的父窗口小部件。當按下按鈕時,我想打開一個無邊界(即沒有Windows裝飾按鈕)窗口直接在父窗口小部件的左側對齊。我感到困惑的是,設置窗口位置的唯一方式(看起來)是使用.geometry()
,但更糟的是,我似乎無法獲得父窗口小部件的絕對座標 - 我需要的是.geometry()
,只有偏移量來自父母的父母。到目前爲止,我的代碼是:在Tkinter python中放置相對於父項的子窗口
# 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()
的路要走還是有更好的方法?
你說你想創建一個彈出窗口,並且你的類名稱是PopUpWindow,但是你從Frame而不是Toplevel繼承。這是有原因的嗎?我不太明白你如何使用它。該按鈕是否顯示ChildPopUpWindow框架內的彈出窗口? –
對不起,這不是很清楚:'onDropDown'是按鈕所在幀的處理程序。點擊按鈕時,想法是用按鈕彈出框架正下方的無框(即沒有Windows最大化/最小化/關閉按鈕等)。這將基本上以一種模式的方式起作用,除非彈出式選擇或再次按下按鈕將關閉它。通過這種方式,它有點像說日曆或顏色選擇器下拉菜單。 –
@BryanOakley:恐懼會導致Toplevel/Frame混淆,這是因爲我做了許多不同的嘗試才得以實現。我發現的大多數例子似乎都創建了Toplevel窗口,然後將其作爲參數傳遞給Frame-inhereting類。我想遵循這一點,並嘗試在框架之前使用它們在構造函數中設置Toplevel窗口的參數,儘管我想將這些封裝在'ChildPopUpWindow'類中。請感受無限評論/改正。 –