我删除了之前关于此的问题,以便简化我的问题并更清楚地传达问题 . 我想点击一个按钮就可以在新窗口中显示日历 . 我目前正在使用this日历脚本,在我的整个脚本中进行了一些小改动 . 我在Calendar脚本的第一部分中将Frame更改为Toplevel,如下所示:
class Calendar(tk.Toplevel):
def __init__(self, parent, **kw):
Toplevel.__init__(self, parent, **kw)
现在,这确实在Toplevel窗口中创建了Calendar以及我的其余脚本,但是一旦程序启动它就会立即执行 . 我希望在用户稍后调用它时显示它 .
例:
class Application(tk.Tk): # tk.Tk creates main window
def __init__(self):
tk.Tk.__init__(self)
self.title("T")
self.geometry('550x320')#x,y
self.create_options()
self.calendar = Calendar(self)
def create_options(self):
self.widgets = tk.Frame(self)
tk.Button(self,
text = "...", command=self.show_Calendar
).place(x=525, y=130)
这会称之为:
def show_Calendar(self):
'''shows calendar'''
toplevel = Toplevel()
toplevel.Calendar.place(x=0, y=0)
该按钮确实创建了一个窗口,但它没有任何内容 . 将此日历仅显示在单击按钮时出现的窗口中的最佳方法是什么?
1 回答
将此行放在应用程序
init
中将在创建应用程序的同时创建它 . 您可能希望将其移动到show_Calendar
方法中 .toplevel = Toplevel()
在这里没有任何意义 . 您正在创建一个空白Toplevel
并使其成为局部变量 .Toplevel
与您的日历有任何相关的 not .在Calendar脚本中,您确保Calendar类继承自
Toplevel
,因此每次创建Calendar时,它都将附加到自己的Toplevel
.在删除之前我正在查看您之前的问题,如果您还希望在用户更改焦点时删除日历,则应在此处查看Events and Bindings,特别是
<FocusOut>
.