我删除了之前有关此问题的问题,以便简化我的问题并更清楚地传达问题。我有一个包含多个课程的项目,我想点击一个按钮就可以在新窗口中显示日历。我目前正在使用this日历脚本,在我的整个脚本中进行了一些小改动。我在Calendar脚本的第一部分中将Frame更改为Toplevel,如下所示:
class Calendar(tk.Toplevel):
def __init__(self, parent, **kw):
Toplevel.__init__(self, parent, **kw)
现在,这确实会在Toplevel窗口中创建日历以及我的其余脚本,但是一旦程序启动它就会立即执行。我希望在用户稍后调用它时显示它。
示例:
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)
该按钮确实创建了一个窗口,但其中没有任何内容。将此日历仅显示在单击按钮时出现的窗口中的最佳方法是什么?
答案 0 :(得分:1)
self.calendar = Calendar(self)
将此行放在应用程序init
中将在创建应用程序的同时创建它。您可能希望将其移至show_Calendar
方法。
def show_Calendar(self):
'''shows calendar'''
toplevel = Toplevel()
toplevel.Calendar.place(x=0, y=0)
toplevel = Toplevel()
在这里没有任何意义。您正在创建一个空白Toplevel
并使其成为局部变量。此Toplevel
不以任何方式与您的日历相关。
在日历脚本中,您确保Calendar类继承自Toplevel
,因此每次创建日历时,它都会附加到自己的Toplevel
。
def show_Calendar(self):
'''shows calendar'''
self.calendar = Calendar(self)
我在删除之前查看了您之前的问题,如果您还希望在用户更改焦点时删除日历,则应在此处查看Events and Bindings,具体为<FocusOut>
。< / p>