2016-08-12 83 views
0

我刪除了我之前關於此問題的一個問題,以簡化我的問題並將問題更清晰地傳達出去。我有一個內部有多個類的項目,我想在一個新的窗口中顯示一個日曆,一旦我點擊一個按鈕。我目前正在使用this日曆腳本,並在我的整個腳本中進行了一些小改動。我改變幀到Toplevel爲在日曆這樣的腳本的第一部分:Tkinter,在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) 

該按鈕並創建一個窗口,但有什麼也沒有。什麼是最好的方式讓這個日曆只顯示在點擊按鈕時出現的窗口中?

回答

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>

+0

沒有理由在'Calendar'實例上調用'place',因爲它是'Toplevel'。事實上,調用'place'會拋出一個錯誤,因爲'Toplevel'的實例沒有'place'函數。 –

+0

我明白了。我已經刪除了該行。 – Hobbes

+0

@霍布斯非常感謝!過去幾天我一直在網上搜索,試圖找到一種方法。感謝幫助! – TheHoff

相關問題