2013-03-06 81 views
0

我试图获得“Dragon On”的值应该从“On”开始。我想将它与“关”进行比较,但它不能识别这种变化。第二次按下按钮时,它会将文本变量设置为关闭,但比较不会检测到它已更改。我也试过Python无法比较Tkinter值

if (self.e3.config('textvariable')[-1] == 'Off') 

但它只是继续。

from Tkinter import * 
import time 
import datetime 
import threading 
import sys 
import pdb; 

class App: 

dragon = 300 

def __init__(self, master): 

    Label(master, text="Dragon Down").grid(row=2) 
    self.e3 = Button(master,command=self.dragon_callback,width=15,text="Dragon On",textvariable="On") 
    self.e4 = Entry(master) 

    self.e3.grid(row=2, column=1) 
    self.e4.grid(row=2, column=2) 


def dragon_callback(self): 
    print "%s" % self.e3.config('textvariable')[-1] 
    # print sys._current_frames() 
    if self.e3.config('textvariable')[-1]: 
     print "inside here the variable is '%s' " % self.e3.config('textvariable')[-1] 
     try: 
      self.t2_stop = threading.Event() 
      t = threading.Thread(target=self.dragon_time,name="Dragon Thread",args=("eee",self.t2_stop)) 
      t.daemon = True 
      t.start() 
     except: 
      print "Error: unable to start thread" 
     self.e3.config(textvariable='Off') 
    else: 
     print " i stopped" 
     self.t2_stop.set() 
     self.e4.delete(0, END) 
     self.e3.config(textvariable='True') 



def dragon_time(self,bleh,stop_event): 
    #print "did i get the value %s" % self.text_area.get() 
    boom=300 
    while(not stop_event.is_set() and boom > 0): 
     #equivalent to time.sleep() 
     self.e4.delete(0, END) 
     self.e4.insert(0, boom) 
     time.sleep(1) 
     self.e4.delete(0, END) 
     self.e4.insert(0, boom) 
     boom -=1 
     pass 


root = Tk() 
root.title("Timer") 


app = App(root) 

root.mainloop() 

回答

2

要作出这样的比较,您必须将对象转换为字符串

if (str(self.e3.config('textvariable')[-1]) == 'Off'): 
+0

烨多数民众赞成它。你是对的 – tiggles 2013-03-06 02:49:38