Вопрос : установить местоположение Tkinter Dialog
?
Вы используете simpledialog.Dialog
, который блокирует in __init__
пока он не будет уничтожен.
Чтобы разместить Dialog
, используя self.geometry(...
, вам нужно зацепить в self.deiconify(...
.
import tkinter as tk
from tkinter import simpledialog
class CalendarDialog(simpledialog.Dialog):
def __init__(self, master, coord=(0, 0), title=None):
self.coord = coord
super().__init__(master, title=title)
# super() is blocking
def deiconify(self):
x, y = self.coord
self.geometry('{width}x{height}+{x}+{y}'\
.format(width=200, height=100, x=x, y=y))
super().deiconify()
Использование :
class App(tk.Tk):
def __init__(self):
super().__init__()
self.menubar = tk.Menu(self, tearoff=0)
self.config(menu=self.menubar)
self.menubar.add_command(label="Check-In",
command=lambda x=50, y=self.menubar.yposition(1):
self.CheckIn(x, y))
def CheckIn(self, x, y):
coord = self.winfo_rootx() + x, self.winfo_rooty() + y
cd = CalendarDialog(self, title='Check_In', coord=coord)
if __name__ == "__main__":
App().mainloop()
Протестировано с Python: 3,5 - 'TclVersion': 8,6 'TkVersion': 8,6