首页 文章

Tkinter,点击按钮,在Toplevel窗口中显示日历

提问于
浏览
0

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

  • 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 与您的日历有任何相关的 not .

    在Calendar脚本中,您确保Calendar类继承自 Toplevel ,因此每次创建Calendar时,它都将附加到自己的 Toplevel .

    def show_Calendar(self):
        '''shows calendar'''
        self.calendar = Calendar(self)
    

    在删除之前我正在查看您之前的问题,如果您还希望在用户更改焦点时删除日历,则应在此处查看Events and Bindings,特别是 <FocusOut> .

相关问题