[英]How do I set the location of a Tkinter Dialog pop-up?
我无法在我想要的位置打开自定义对话框。 我玩过self.geometry("+%d+%d" % (x1, x2))
没有成功。 理想情况下,我希望它在鼠标指针的位置打开。
通过菜单命令调用对话框:
menu = tk.Menu(self.treeDocs, tearoff=0)
menu.add_command(label="Check-In",
command=lambda tv=self.treeDocs: self.CheckIn(tv))
def CheckIn(self, tv):
cd = CalendarDialog(self)
docDate = cd.result
if docDate is not None:
docID = tv.set(self.ident, "ID")
conn = pyodbc.connect(strConn)
cursor = conn.cursor()
strSQL = '''INSERT INTO tblDocDates (ID_DOC, ACCESSDATE)
VALUES (%s, #%s#)''' % (docID, docDate)
cursor.execute(strSQL)
cursor.commit()
这是 class:
class CalendarDialog(tk.simpledialog.Dialog):
def __init__(self, master, title="Check-In"):
tk.simpledialog.Dialog.__init__(self, master, title="Check-In")
def body(self, master):
self.calendar = tkcalendar.DateEntry(master)
self.calendar.pack()
def apply(self):
self.result = self.calendar.get()
谢谢您的帮助!
问题:设置一个Tkinter
Dialog
的位置?
您正在使用simpledialog.Dialog
,它在__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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.