2014-04-29 3 views
0

Tkinter에서 데이터를 가져올 수있는 항목 공간이 있습니다. 체크 박스를 사용하여이 공간을 활성화하거나 비활성화하고 싶습니다. 체크 버튼은 == 1, 데이터를 삽입 할 수 있습니다, 체크 버튼 == 0이 공간은 회색되었을 때 당신은 내가이 일을해야한다고 생각 데이터를Python : 체크 박스가있는 Tkinter 활성 및 비활성 입력 공간

from Tkinter import * 
import tkMessageBox 


class MainWindow(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.master.title("input") 
     self.master.minsize(150, 50) 
     self.grid(sticky=E+W+N+S) 

     top=self.winfo_toplevel() 
     top.rowconfigure(0, weight=1) 
     top.columnconfigure(0, weight=1) 

     for i in range(1):self.rowconfigure(i, weight=1) 
     self.columnconfigure(1, weight=1) 

     self.label0 = Label(self, text="Data: ") 
     self.label0.grid(row=0, column=0, padx=2) 

     self.entry11 = Entry(self) 
     self.entry11.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S) 

     self.CheckVar_theta = IntVar() 
     self.check = Checkbutton(self, text="", variable=self.CheckVar_theta, onvalue = 0, offvalue = 1) 
     self.check.grid(row=0, column=3, pady=0, padx=0, sticky=E+W+N+S) 

if __name__=="__main__": 
    d=MainWindow() 
    d.mainloop() 

답변

2

당신이해야 할 두 가지 :

  1. 는 체크 버튼을 클릭 할 때마다 호출 될 entrybox의 상태를 변경하는 기능을합니다. 그것은 다음과 비슷한 모습이 될 것입니다

    def switch(self): 
        if self.CheckVar_theta.get(): 
         self.entry11.config(state=DISABLED) 
        else: 
         self.entry11.config(state=NORMAL) 
    
  2. 그 기능에 체크 버튼의 command 매개 변수를 지정 : 결국

    self.check = Checkbutton(self, ..., command=self.switch) 
    

, 당신의 코드는 다음과 같이 표시됩니다

from Tkinter import * 
import tkMessageBox 


class MainWindow(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.master.title("input") 
     self.master.minsize(150, 50) 
     self.grid(sticky=E+W+N+S) 

     top=self.winfo_toplevel() 
     top.rowconfigure(0, weight=1) 
     top.columnconfigure(0, weight=1) 

     for i in range(1):self.rowconfigure(i, weight=1) 
     self.columnconfigure(1, weight=1) 

     self.label0 = Label(self, text="Data: ") 
     self.label0.grid(row=0, column=0, padx=2) 

     self.entry11 = Entry(self) 
     self.entry11.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S) 

     self.CheckVar_theta = IntVar() 
     self.check = Checkbutton(self, text="", variable=self.CheckVar_theta, 
           onvalue = 0, offvalue = 1, command=self.switch) 
     self.check.grid(row=0, column=3, pady=0, padx=0, sticky=E+W+N+S) 

    def switch(self): 
     if self.CheckVar_theta.get(): 
      self.entry11.config(state=DISABLED) 
     else: 
      self.entry11.config(state=NORMAL) 

if __name__=="__main__": 
    d=MainWindow() 
    d.mainloop() 
+0

감사 ICodez, 작품. 문제가 있습니다. Checkbutton이 0 인 경우 처음 코드를 실행할 때 항목이 비활성화됩니다. Checkbutton에서 완벽한 작업을 한 번 이상 클릭하면 –

+0

@ 지아 니스 - 문제를 재현하는 데 문제가 있습니다. 창을 열면 체크 버튼이 클릭되고 입력 상자가 활성화됩니다. 창을 열 때 entrybox가 _deactivated_라고 말하는 것입니까? – iCodez

+0

Icodez 나를 신뢰하십시오! 그것은 이상하게 지금 완벽하게 작동합니다. 나는 정말로 모른다! –

1

를 삽입 할 수없는 경우 :

from Tkinter import * 
import tkMessageBox 


class MainWindow(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.master.title("input") 
     self.master.minsize(150, 50) 
     self.grid(sticky=E+W+N+S) 

     top=self.winfo_toplevel() 
     top.rowconfigure(0, weight=1) 
     top.columnconfigure(0, weight=1) 

     for i in range(1):self.rowconfigure(i, weight=1) 
     self.columnconfigure(1, weight=1) 

     self.label0 = Label(self, text="Data: ") 
     self.label0.grid(row=0, column=0, padx=2) 

     self.entry11 = Entry(self) 
     self.entry11.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S) 

     self.CheckVar_theta = IntVar() 
     self.check = Checkbutton(self, text="", variable=self.CheckVar_theta, onvalue = 0, offvalue = 1) 
     self.check.grid(row=0, column=3, pady=0, padx=0, sticky=E+W+N+S) 

     self.update() 

     def update(self): 
      if self.CheckVar_theta.get() == 1: 
       self.entry11.config(state=NORMAL) 
      else: 
       self.entry11.config(state=DISABLED) 
      self.master.after(100, self.update) 

if __name__=="__main__": 
    d=MainWindow() 
    d.mainloop() 
+0

미안 해요 –