2015-05-10 121 views
-1

如果按下「一個」按鈕,如何隱藏所有按鈕?那可能嗎?如果按下一個按鈕,隱藏所有按鈕

這是我的代碼和所有我已經試過:

import sys 
from Tkinter import * 
from ttk import Frame, Button, Label, Style 
from ttk import Entry 
import Tkinter 


class AllButtons(Frame): 


    def __init__(self, parent):  
     Frame.__init__(self, parent)   
     self.parent = parent  
     self.initUI() 

    def callback(self, number):  
     print "click!", self, number 

    def hide_me(self, event): 
     event.widget.grid_forget(), self, event 

    def initUI(self): 

     self.parent.title("mGUI") 
     Style().configure("TButton", padding=(0, 5, 0, 5), 
      font='serif 20', background="Black", foreground="darkorange2", 
      activebackground="red",activeforeground="red") 

     self.columnconfigure(0, pad=3) 
     self.columnconfigure(1, pad=3) 
     self.columnconfigure(2, pad=3) 
     self.columnconfigure(3, pad=3) 

     self.rowconfigure(0, pad=3) 
     self.rowconfigure(1, pad=3) 
     self.rowconfigure(2, pad=3) 
     self.rowconfigure(3, pad=3) 
     self.rowconfigure(4, pad=3) 


     Funk_1 = Button(self, text="Funk_1", command=lambda:self.callback(1)) 
     Funk_1.grid(row=1, column=0) 

     Funk_2 = Button(self, text="Funk_2", command=lambda:self.callback(2)) 
     Funk_2.grid(row=1, column=1) 

     Funk_3 = Button(self, text="Funk_3", command=lambda:self.callback(3)) 
     Funk_3.grid(row=1, column=3)   

     Funk_4 = Button(self, text="Funk_4", command=lambda:self.callback(4)) 
     Funk_4.grid(row=3, column=0) 

     Funk_5 = Button(self, text="Funk_5", command=lambda:self.callback(5)) 
     Funk_5.grid(row=3, column=1)   

     Funk_6 = Button(self, text="Funk_6", command=lambda:self.callback(6)) 
     Funk_6.grid(row=3, column=3)    

     Funk_7 = Button(self, text="Funk_7", command=lambda:self.callback(7)) 
     Funk_7.grid(row=5, column=0) 

     Funk_8 = Button(self, text="Funk_8", command=lambda:self.callback(8)) 
     Funk_8.grid(row=5, column=1)   

     Funk_9 = Button(self, text="Funk_9", command=lambda:self.callback(9)) 
     Funk_9.grid(row=5, column=3) 

     Funk_1.bind('<Button-1>', self.hide_me) 
     Funk_2.bind('<Button-1>', self.hide_me) 
     Funk_3.bind('<Button-1>', self.hide_me) 
     Funk_4.bind('<Button-1>', self.hide_me) 


     self.pack() 


    def main(): 

     mGUI = Tk() 
     app = AllButtons(mGUI) 
     mGUI.mainloop() 


    if __name__ == '__main__': 
     main() 

回答

0

您可以控制按鈕的狀態。如果您使用'state = normal'初始化按鈕,則可以使用另一個按鈕調用禁用該按鈕的方法。

self.Funk_1 = Button(self, text="Funk_1", state='normal', command=lambda:self.set_buttons) 
self.Funk_1.grid(row=1, column=0) 

def set_buttons(self): 
    self.Funk_1.configure(state='disabled') 

您可以在這裏閱讀更多; http://effbot.org/tkinterbook/button.htm

+0

非常感謝! – Patrick

+0

np - 請記住通過選中您喜歡的答案來標記您的問題,這也將獎勵那些以難以置信的聲譽回答您的問題的人:) – djoe

0

如果將按鈕的ID存儲在列表中,然後在列表中進行操作,這是最簡單的。你的代碼被簡化爲按鈕和回調。

from Tkinter import * 
from functools import partial 

class AllButtons(): 

    def __init__(self, parent):  
     self.parent = parent  
     self.initUI() 
     Button(self.parent, text="Exit", command=self.parent.quit, 
       bg="orange").grid(row=20, column=2) 

    def callback(self, number):  
     """ removes all buttons not clicked 
     """ 
     number=int(number) 
     print "click!", number 
     for ctr in range(len(self.button_list)): 
      if ctr != number: ## leave the button clicked 
       print "Deleting button number", ctr+1 
       self.button_list[ctr].grid_forget() 

    def initUI(self): 
     """ create 9 buttons and store their Tkinter ID's in a list 
     """ 
     self.parent.title("mGUI") 

     self.button_list=[] 
     g_row=1 
     g_col=1 
     for ctr in range(9): 
      ## creating button located at offset "ctr" in the list 
      ## this is also the number sent to the callback 
      funk=Button(self.parent, text="Funk_%d" % (ctr+1), 
         command=partial(self.callback, ctr)) 
      ## add each button's id to the list 
      self.button_list.append(funk) 
      funk.grid(row=g_row, column=g_col) 
      g_col += 1 
      if g_col > 3: 
       g_row += 2 
       g_col=1 

if __name__ == '__main__': 
     mGUI = Tk() 
     app = AllButtons(mGUI) 
     mGUI.mainloop()