Tkinter,按钮点击

时间:2016-08-12 18:14:59

标签: python tkinter calendar

我删除了之前有关此问题的问题,以便简化我的问题并更清楚地传达问题。我有一个包含多个课程的项目,我想点击一个按钮就可以在新窗口中显示日历。我目前正在使用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)

该按钮确实创建了一个窗口,但其中没有任何内容。将此日历仅显示在单击按钮时出现的窗口中的最佳方法是什么?

1 个答案:

答案 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>