2016-04-29 60 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

对于这种事情使用线程是没用的。只需使用**命令**选项将这些回调方法附加到按钮 –

相关问题