2016-04-29 80 views
1

我有一個開始按鈕窗口和一些小部件在不同的frames.Now我想讓窗口空閒(禁用狀態),直到「開始」按鈕被點擊。幫我解決這個問題。我的代碼是下面如何使窗口空閒狀態,直到在python tkinter中按下按鈕?

from tkinter import * 

類應用(幀):

def __init__(self, master): 
    super(Application,self).__init__(master) 
    self.grid() 
    self.create_widgets() 

def create_widgets(self): 
    self.be=Button(self,text="start") 
    self.be.grid(row=1,column=1,sticky="s") 

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

    self.rowconfigure(0, pad=5) 
    self.rowconfigure(1, pad=5) 
    self.f3=Frame(self) 
    self.f3.grid(row=2,column=1) 
    fuel = Button(self.f3, text="Button",width=19) 
    fuel.grid(row=1, column=0) 
    Temp = Button(self.f3, text="Button",width=19) 
    Temp.grid(row=1, column=1) 
    Th = Button(self.f3,text="Button",width=19) 
    Th.grid(row=1, column=2)  
    Eo = Button(self.f3, text="Button",width=19) 
    Eo.grid(row=1, column=3) 

    Bh = Button(self.f3, text="Button",width=19) 
    Bh.grid(row=2, column=0)   
    Abs = Button(self.f3, text="Button",width=19) 
    Abs.grid(row=2, column=1)   
    sp = Button(self.f3, text="Button",width=19) 
    sp.grid(row=2, column=2) 
    fo = Button(self.f3, text="Button",width=19) 
    fo.grid(row=2, column=3) 

root= Tk() 
app=Application(root) 
app.mainloop() 

回答

2

你,而需要循環的部件,並通過一個禁用它們之一,因爲你無法禁用整個Frame對象就是這樣。

因此,您需要使用winfo_children()來探測子窗口小部件。

然後,您將需要使用command回調將方法附加到self.be按鈕以啓用子部件。

全部程序

這裏是你正在尋找的程序:

''' 
Created on Apr 29, 2016 

@author: billal begueradj 
''' 
from tkinter import * 

class Application(Frame): 

    def __init__(self, master): 
     super(Application,self).__init__(master) 
     self.grid() 
     self.create_widgets() 

    def create_widgets(self): 
     self.be=Button(self,text="start", command = self.enable_widgets) 
     self.be.grid(row=1,column=1,sticky="s") 

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

     self.rowconfigure(0, pad=5) 
     self.rowconfigure(1, pad=5) 
     self.f3=Frame(self) 
     self.f3.grid(row=2,column=1) 
     fuel = Button(self.f3, text="Button",width=19) 
     fuel.grid(row=1, column=0) 
     Temp = Button(self.f3, text="Button",width=19) 
     Temp.grid(row=1, column=1) 
     Th = Button(self.f3,text="Button",width=19) 
     Th.grid(row=1, column=2)  
     Eo = Button(self.f3, text="Button",width=19) 
     Eo.grid(row=1, column=3) 

     Bh = Button(self.f3, text="Button",width=19) 
     Bh.grid(row=2, column=0)   
     Abs = Button(self.f3, text="Button",width=19) 
     Abs.grid(row=2, column=1)   
     sp = Button(self.f3, text="Button",width=19) 
     sp.grid(row=2, column=2) 
     fo = Button(self.f3, text="Button",width=19) 
     fo.grid(row=2, column=3) 
     for child in self.f3.winfo_children(): 
      child.configure(state = 'disable') 


    def enable_widgets(self): 
     '''Enable the child widgets''' 
     for child in self.f3.winfo_children(): 
      child.configure(state = 'normal') 


root= Tk() 
app=Application(root) 
app.mainloop() 

演示

在節目的開始,GUI會是這樣的:

enter image description here

點擊後按鈕:

enter image description here

+1

非常感謝它做工精細.... @ Billal – sujit

+0

我還有一個query.In上述程序的每個按鈕執行單獨functions.On點擊按鈕,新的窗口將打開,這是現在我想同時執行每個按鈕的功能。例如,如果我點擊button1,它應該繼續接受來自文件的輸入,並給出輸出,即使我點擊button2.Can我可以在這裏使用線程概念嗎?如果是的話,你可以嗎?告訴我如何? – sujit

+0

對於這種事情使用線程是沒用的。只需使用**命令**選項將這些回調方法附加到按鈕 –

相關問題