簡體   English   中英

Tkinter,在單擊按鈕時在“頂級”窗口中顯示日歷

[英]Tkinter, show Calendar in Toplevel window on button click

我刪除了有關此問題的先前問題,以簡化我的問題並使問題更清楚地傳達。 我有一個包含多個類的項目,並且我想在單擊按鈕后將日歷顯示在新窗口中。 我目前正在使用 Calendar腳本,但總體腳本內部進行了較小的更改。 我在Calendar腳本的第一部分中將Frame更改為Toplevel,如下所示:

class Calendar(tk.Toplevel):

    def __init__(self, parent, **kw):

        Toplevel.__init__(self, parent, **kw)

現在,它的確與其他腳本一起在“頂級”窗口中創建了“日歷”,但是在程序啟動后立即進行了創建。 我想讓它顯示在以后用戶調用它時。

例:

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)

該按鈕確實創建了一個窗口,但其中沒有任何內容。 使此日歷僅在單擊按鈕時出現的窗口中顯示的最佳方法是什么?

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腳本中,您確保Calendar類繼承自Toplevel ,因此, Toplevel創建Calendar時,它將被附加到其自己的Toplevel

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

在刪除之前,我一直在查看您的上一個問題,如果您還想在用戶更改焦點時刪除日歷,則應在此處查看“ 事件和綁定” ,尤其是<FocusOut>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM