2015-12-10 27 views
-1

我正在使用tkinter python 3代碼。簡而言之代碼如下所示:tkinter顯示多個按鈕與多個框架(面向對象編程)字典

import tkinter as tk 
class home(tk.Tk): 
#consists of frames 
class frame1(tk.Frame): 
#consists of buttons 
class frame2(tk.Frame): 
#consists of buttons 

問題是我生成字典多個按鈕,但是當我網格框按鈕2,什麼是真正發生的是按鈕位於不在幀2,但在家裏。所以每次我切換到第1幀時,第2幀中的按鈕仍然顯示出來。誰可以給我一個解決方案?

+0

沒有足夠的代碼。請創建一個[minimal,_complete_,verifiable example](http://stackoverflow.com/help/mcve) –

回答

0

但是當我在第2幀中按下按鈕時,實際發生的是按鈕不在第2幀中,而是在家中。

您通常將它們放置在一個特定的幀時創建的按鈕,不與格()

所以每次我切換到第1幀在幀2中的按鈕仍然顯示。

按鈕會一直顯示,直到你銷燬它們或grid_forget(),即刪除它們。您也可以根據需要多次調用「用按鈕創建新框架」類。沒有必要爲每個框架單獨設置一個類,請參閱下面的一個簡單示例。

import sys 
if sys.version_info[0] < 3: 
    import Tkinter as tk  ## Python 2.x 
else: 
    import tkinter as tk  ## Python 3.x 

class Home(): 
    def __init__(self, root): 
     self.root=root 
     self.column=0 
     main_frame=tk.Frame(self.root) 
     main_frame.grid(row=0) 
     but=tk.Button(main_frame, text="Open a Frame of Buttons", 
         command=self.open_another) 
     but.grid(row=0, column=0) 
     tk.Button(main_frame, text="Exit Tkinter", bg="red", 
       command=self.root.quit).grid(row=1, column=0, sticky="we") 

    def open_another(self): 
     """ A new frame is created every time the botton is pressed 
     """ 
     self.column += 1 
     another=ButtonFrame(self.root, self.column) 

class ButtonFrame(): 
    def __init__(self, root, col): 
     self.fr=tk.Frame(root) 
     self.fr.grid(row=0, column=col) 
     but=tk.Button(self.fr, 
      text="A new frame with a button "+  str(col)).grid(row=0) 
     tk.Button(self.fr, text="Destroy This Frame", bg="orange", 
        command=self.fr.destroy).grid(row=1, column=0) 

root=tk.Tk() 
H=Home(root) 
root.mainloop() 
+0

其實我正在製作多個框架,其中類家庭繼承自tk.Tk 我試圖讓多個按鈕我已經生成的只存在於某個框架中,但實際發生的是那些按鈕出現在每個框架中。我使用tkraise()來顯示每個幀。 – Steveyo

+0

無法調試沒有任何代碼的代碼。上面的解決方案是可以完成的最好的。也許用一些代碼和聲明來開始一個新的線程,告訴你哪些工作不能按照你想要的方式工作。 –

+0

我會通過電子郵件發送代碼?那個怎麼樣?我會給你發送源代碼,我可以問你的電子郵件嗎? – Steveyo