버튼이 포함 된 상위 위젯이 있습니다. 버튼을 누르면 왼쪽면에 정렬 된 부모 위젯 바로 아래에 경계선없는 (즉, Windows 장식 단추가 없음) 창을 열고 싶습니다. 나는 창 위치를 설정하는 유일한 방법은 .geometry()
을 사용하고 있지만 부모 위젯의 절대 좌표를 얻을 수없는 것 같아서 당황 스럽다. 나는 .geometry()
의 오프셋 만 필요하다. 부모의 부모. 지금까지 내 코드는 다음과 같습니다.Tkinter 파이썬에서 부모를 기준으로 자식 창 배치하기
# 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가 표시되지만 Toplevel이 아닌 Frame을 상속한다고 말합니다. 그 이유가 있을까요? 나는 이것을 어떻게 사용하는지 잘 모른다. ChildPopUpWindow 프레임 안에 팝업 창을 표시하는 버튼입니까? –
죄송합니다. 매우 명확하지 않습니다.'onDropDown'은 버튼이있는 프레임의 핸들러입니다. 버튼을 클릭하면 버튼이있는 프레임 바로 아래에 프레임이없는 (즉, Windows 최대화/최소화/닫기 버튼 없음) 팝업이 표시됩니다. 이것은 모달 방식으로 본질적으로 작동 할 것입니다. 단, 팝업에서 선택하거나 단추를 다시 누르면 닫을 수 있습니다. 이런 식으로 캘린더 나 색상 선택기 드롭 다운과 같은 효과가 있습니다. –
@BryanOakley : Toplevel/Frame 혼란은이 작업을 수행하기 위해 여러 가지 시도를하고 있기 때문에 발생합니다. 필자가 찾은 대부분의 예제는 Toplevel 윈도우를 생성 한 다음이를 Frame-inhereting 클래스의 매개 변수로 전달하는 것처럼 보입니다. 나는 이것을 따라 가기를 원했고 프레임 이전에 Toplevel 윈도우의 매개 변수를 설정하려고 시도했다. 그러나 생성자를 'ChildPopUpWindow' 클래스에 캡슐화하고 싶었다. 의견을 말하고 올바르게 수정하십시오. –