2016-02-25 95 views
0

我有一些代碼可以在用戶按下按鈕時創建一個頂級窗口。如何限制tkinter中的Toplevel窗口的數量

但是我想限制一個頂級窗口的數量,所以用戶不能垃圾按鈕並打開五十個窗口。

import tkinter as tk 

class app(): 

    def __init__(self,master): 

     self.master = master  
     master.configure(background = '#002e3d') 
     master.title('Test!') 
     master.geometry = master.geometry('660x550+200+200') 
     master.resizable(width = False,height = False) 
     self.button = tk.Button(master,text = 'Test'command = self.searchmenu) 
     self.button.pack() 

    def searchmenu(self): 
     Demo() 


class Demo(): 

    def __init__(self): 
     self.top = tk.Toplevel() 
     self.top.title('Search!') 


def main(): 

    root = tk.Tk() 
    window = app(root) 
    root.mainloop() 
+1

如果用戶想打開窗戶50,爲什麼阻止他?也許他有你無法預料的原因,爲什麼要添加代碼來不必要地限制用戶呢?此外,你不寫的代碼 - 根據定義 - 零錯誤。 – msw

+0

如果@ msw的聰明評論忽略了你的頭腦:來自http://stackoverflow.com/help/on-topic「提出作業幫助的問題必須包括迄今爲止解決問題所做的工作的總結,以及描述你解決問題的難度。「儘管你需要這樣做,不管是否用於作業。 –

+0

謝謝。我會考慮你們所說的。 – Chris

回答

0

如果你犯了一個參考Demo對象創建(我想無論推薦)這將成爲非常簡單的任務:

class app(): 

    def __init__(self,master): 
     ... 
     self.popup = None 

    def searchmenu(self): 
     if self.popup is None: 
      self.popup = Demo() 

雖然曾經所創建的窗口被銷燬,這並不允許重新打開它,所以你可能還需要檢查是否頂部仍然存在winfo_exists()

def searchmenu(self): 
    if self.popup is None or not self.popup.top.winfo_exists(): 
     self.popup = Demo() 

編輯:如果彈出菜單已經運恩,然後按下按鈕應該是lift到窗口堆棧的頂部:

def searchmenu(self): 
    if self.popup is None or not self.popup.top.winfo_exists(): 
     self.popup = Demo() 
    else: 
     self.popup.top.lift(self.master)