2010-06-13 2 views
1

다음 코드에서 팝업 창을 마우스 오른쪽 버튼으로 클릭하면 다음 오류가 발생합니다. 그런 다음 맨 아래 항목 위젯으로 이동 한 다음 내용을 삭제하십시오. 그것은 나에게 TclError를주는 것처럼 보인다. 이러한 오류를 전달하려면 어떻게해야합니까?Python에서 TclErrors 처리

오류

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python26\Lib\lib-tk\Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "C:\Python26\CPUDEMO.py", line 503, in I 
    TL.sclS.set(S1) 
    File "C:\Python26\Lib\lib-tk\Tkinter.py", line 2765, in set 
    self.tk.call(self._w, 'set', value) 
TclError: expected floating-point number but got "" 

강령

 #F 

    #PIthon.py 


    # Import/Setup 

    import Tkinter 
    import psutil,time 
    import re 

    from PIL import Image, ImageTk 
    from time import sleep 


    class simpleapp_tk(Tkinter.Tk): 
     def __init__(self,parent): 
      Tkinter.Tk.__init__(self,parent) 
      self.parent = parent 
      self.initialize() 

     def initialize(self): 

# Widgets 



     self.menu = Tkinter.Menu(self, tearoff = 0) 
     M = [ "Options...", "Exit"] 
     self.selectedM = Tkinter.StringVar() 

     self.menu.add_radiobutton(label = 'Hide', variable = self.selectedM, command = self.E) 
     self.menu.add_radiobutton(label = 'Bump', variable = self.selectedM, command = self.E) 
     self.menu.add_separator() 
     self.menu.add_radiobutton(label = 'Options...', variable = self.selectedM, command = self.E) 
     self.menu.add_separator() 
     self.menu.add_radiobutton(label = 'Exit', variable = self.selectedM, command = self.E) 





     self.frame1 = Tkinter.Frame(self,bg='grey15',relief='ridge',borderwidth=4,width=185, height=39) 
     self.frame1.grid() 
     self.frame1.grid_propagate(0) 
     self.frame1.bind("<Button-3><ButtonRelease-3>", self.D) 
     self.frame1.bind("<Button-2><ButtonRelease-2>", self.C) 
     self.frame1.bind("<Double-Button-1>", self.C) 









     self.labelVariable = Tkinter.StringVar() 
     self.label = Tkinter.Label(self.frame1,textvariable=self.labelVariable,fg="lightgreen",bg="grey15",borderwidth=1,font=('arial', 10, 'bold')) 
     self.label.grid(column=1,row=0,columnspan=1,sticky='nsew') 

     self.label.bind("<Button-3><ButtonRelease-3>", self.D) 
     self.label.bind("<Button-2><ButtonRelease-2>", self.C) 
     self.label.bind("<Double-Button-1>", self.C) 
     self.F() 

     self.overrideredirect(1) 
     self.wm_attributes("-topmost", 1) 



     global TL1 
     TL1 = Tkinter.Toplevel(self) 
     TL1.wm_geometry("+0+5000") 
     TL1.overrideredirect(1) 

     TL1.button = Tkinter.Button(TL1,text="? CPU",fg="lightgreen",bg="grey15",activeforeground="lightgreen", activebackground='grey15',borderwidth=4,font=('Arial', 8, 'bold'),command=self.J) 
     TL1.button.pack(ipadx=1) 



# Events 

    def Reset(self): 

     self.label.configure(font=('arial', 10, 'bold'),fg='Lightgreen',bg='grey15',borderwidth=0) 
     self.labela.configure(font=('arial', 8, 'bold'),fg='Lightgreen',bg='grey15',borderwidth=0) 
     self.frame1.configure(bg='grey15',relief='ridge',borderwidth=4,width=224, height=50) 
     self.label.pack(ipadx=38) 




    def helpmenu(self): 


     t2 = Tkinter.Toplevel(self) 
     Tkinter.Label(t2, text='This is a help menu', 
       anchor="w",justify="left",fg="darkgreen",bg="grey90",relief="ridge",borderwidth=5,font=('Arial', 10)).pack(fill='both', expand=1) 
     t2.resizable(False,False) 
     t2.title('Help') 



     menu = Tkinter.Menu(self) 
     t2.config(menu=menu) 

     filemenu = Tkinter.Menu(menu) 
     menu.add_cascade(label="|  Exit  |", menu=filemenu) 

     filemenu.add_command(label="Exit", command=t2.destroy) 

    def aboutmenu(self): 


     t1 = Tkinter.Toplevel(self) 
     Tkinter.Label(t1, text=' About:\n\n CPU Usage v1.0\n\n Publisher: Drew French\n Date: 05/09/10\n Email: [email protected] \n\n\n\n\n\n\n Written in Python 2.6.4', 
       anchor="w",justify="left",fg="darkgreen",bg="grey90",relief="sunken",borderwidth=5,font=('Arial', 10)).pack(fill='both', expand=1) 
     t1.resizable(False,False) 
     t1.title('About') 

     menu = Tkinter.Menu(self) 
     t1.config(menu=menu) 

     filemenu = Tkinter.Menu(menu) 
     menu.add_cascade(label="|  Exit  |", menu=filemenu) 

     filemenu.add_command(label="Exit", command=t1.destroy) 


    def A (self,event): 

     TL.entryVariable1.set(TL.sclY.get()) 
     TL.entryVariable2.set(TL.sclX.get()) 

     Y = TL.sclY.get() 
     X = TL.sclX.get() 


     self.wm_geometry("+" + str(X) + "+" + str(Y)) 


    def B(self,event): 

     Y1 = TL.entryVariable1.get() 
     X1 = TL.entryVariable2.get() 

     self.wm_geometry("+" + str(X1) + "+" + str(Y1)) 
     TL.sclY.set(Y1) 
     TL.sclX.set(X1) 

    def C(self,event): 

     s = self.wm_geometry() 
     geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 

     m = geomPatt.search(s) 
     X3 = m.group(4) 
     Y3 = m.group(6) 

     M = int(Y3) - 150 

     P = M + 150 



     while Y3 > M: 
      sleep(0.0009) 
      Y3 = int(Y3) - 1 
      self.update_idletasks() 
      self.wm_geometry("+" + str(X3) + "+" + str(Y3)) 


     sleep(2.00) 

     while Y3 < P: 
      sleep(0.0009) 
      Y3 = int(Y3) + 1 
      self.update_idletasks() 
      self.wm_geometry("+" + str(X3) + "+" + str(Y3)) 



    def D(self, event=None): 
     self.menu.post(event.x_root, event.y_root) 


    def E(self): 


     if self.selectedM.get() =='Options...': 


## Setup 


      global TL 
      TL = Tkinter.Toplevel(self) 




      menu = Tkinter.Menu(TL) 
      TL.config(menu=menu) 

      filemenu = Tkinter.Menu(menu) 
      menu.add_cascade(label="|  Menu  |", menu=filemenu) 

      filemenu.add_command(label="Instruction Manual...", command=self.helpmenu) 
      filemenu.add_command(label="About...", command=self.aboutmenu) 
      filemenu.add_separator() 
      filemenu.add_command(label="Exit Options", command=TL.destroy) 
      filemenu.add_command(label="Exit", command=self.destroy) 

      helpmenu = Tkinter.Menu(menu) 
      menu.add_cascade(label="|  Help  |", menu=helpmenu) 
      helpmenu.add_command(label="Instruction Manual...", command=self.helpmenu) 
      helpmenu.add_separator() 
      helpmenu.add_command(label="Quick Help...", command=self.helpmenu) 


## Title 

      TL.label5 = Tkinter.Label(TL,text="CPU Usage: Options",anchor="center",fg="black",bg="lightgreen",relief="ridge",borderwidth=5,font=('Arial', 18, 'bold')) 
      TL.label5.pack(padx=15,ipadx=5) 




## X Y scale 

      TL.separator = Tkinter.Frame(TL,height=7, bd=1, relief='ridge', bg='grey95') 
      TL.separator.pack(pady=5,padx=5) 

##### 


      TL.sclX = Tkinter.Scale(TL.separator, from_=0, to=1500, orient='horizontal', resolution=1, command=self.A) 
      TL.sclX.grid(column=1,row=0,ipadx=27, sticky='w') 

      TL.label1 = Tkinter.Label(TL.separator,text="X",anchor="s",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label1.grid(column=0,row=0, pady=1, sticky='S') 





      TL.sclY = Tkinter.Scale(TL.separator, from_=0, to=1500, resolution=1, command=self.A) 
      TL.sclY.grid(column=2,row=1,rowspan=2,sticky='e', padx=4) 

      TL.label3 = Tkinter.Label(TL.separator,text="Y",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label3.grid(column=2,row=0, padx=10, sticky='e') 





      TL.entryVariable2 = Tkinter.StringVar() 
      TL.entry2 = Tkinter.Entry(TL.separator,textvariable=TL.entryVariable2, 
             fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10)) 
      TL.entry2.grid(column=1,row=1,ipadx=20, pady=10,sticky='EW') 
      TL.entry2.bind("<Return>", self.B) 

      TL.label2 = Tkinter.Label(TL.separator,text="X:",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label2.grid(column=0,row=1, ipadx=4, sticky='W') 





      TL.entryVariable1 = Tkinter.StringVar() 
      TL.entry1 = Tkinter.Entry(TL.separator,textvariable=TL.entryVariable1, 
             fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10)) 
      TL.entry1.grid(column=1,row=2,sticky='EW') 
      TL.entry1.bind("<Return>", self.B) 


      TL.label4 = Tkinter.Label(TL.separator,text="Y:", anchor="center",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label4.grid(column=0,row=2, ipadx=4, sticky='W') 



      TL.label7 = Tkinter.Label(TL.separator,text="Text Colour:",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label7.grid(column=1,row=3,stick="W",ipady=10) 

      TL.selectedP = Tkinter.StringVar() 
      TL.opt1 = Tkinter.OptionMenu(TL.separator, TL.selectedP,'Normal', 'White','Black', 'Blue', 'Steel Blue','Green','Light Green','Yellow','Orange' ,'Red',command=self.G) 

      TL.opt1.config(fg="black",bg="grey90",activebackground="grey90",activeforeground="black", 
         anchor="center",relief="raised",direction='right',font=('Arial', 10)) 
      TL.opt1.grid(column=1,row=4,sticky='EW',padx=20,ipadx=20) 
      TL.selectedP.set('Normal') 

      TL.label7 = Tkinter.Label(TL.separator,text="Refresh Rate:",fg="black",bg="grey95",font=('Arial', 8 ,'bold')) 
      TL.label7.grid(column=1,row=5,stick="W",ipady=10) 

      TL.sclS = Tkinter.Scale(TL.separator, from_=10, to=2000, orient='horizontal', resolution=10, command=self.H) 
      TL.sclS.grid(column=1,row=6,ipadx=27, sticky='w') 
      TL.sclS.set(650) 


      TL.entryVariableS = Tkinter.StringVar() 
      TL.entryS = Tkinter.Entry(TL.separator,textvariable=TL.entryVariableS, 
             fg="grey15",bg="grey90",relief="sunken",insertbackground="black",borderwidth=5,font=('Arial', 10)) 
      TL.entryS.grid(column=1,row=7,ipadx=20, pady=10,sticky='EW') 
      TL.entryS.bind("<Return>", self.I) 
      TL.entryVariableS.set(650) 

############## 

      TL.resizable(False,False) 
      TL.title('Options') 

      geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 
      s = self.wm_geometry() 
      m = geomPatt.search(s) 
      X = m.group(4) 
      Y = m.group(6) 

      TL.sclY.set(Y) 
      TL.sclX.set(X) 





     if self.selectedM.get() == 'Exit': 

      self.destroy() 

     if self.selectedM.get() == 'Bump': 

      s = self.wm_geometry() 
      geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 

      m = geomPatt.search(s) 
      X3 = m.group(4) 
      Y3 = m.group(6) 

      M = int(Y3) - 150 

      P = M + 150 



      while Y3 > M: 
       sleep(0.0009) 
       Y3 = int(Y3) - 1 
       self.update_idletasks() 
       self.wm_geometry("+" + str(X3) + "+" + str(Y3)) 


      sleep(2.00) 

      while Y3 < P: 
       sleep(0.0009) 
       Y3 = int(Y3) + 1 
       self.update_idletasks() 
       self.wm_geometry("+" + str(X3) + "+" + str(Y3)) 









     if self.selectedM.get() == 'Hide': 



      s = self.wm_geometry() 
      geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 

      m = geomPatt.search(s) 
      X3 = m.group(4) 
      Y3 = m.group(6) 

      M = int(Y3) + 5000 






      self.update_idletasks() 
      self.wm_geometry("+" + str(X3) + "+" + str(M)) 



      TL1.wm_geometry("+0+190") 




    def F (self): 




     G = round(psutil.cpu_percent(), 1) 
     G1 = str(G) + '%' 



     self.labelVariable.set(G1) 




     try: 
      S2 = TL.entryVariableS.get() 

     except ValueError, e: 
      S2 = 650 

     except NameError: 
      S2 = 650 
     self.after(int(S2), self.F) 










    def G (self,event): 

     if TL.selectedP.get() =='Normal': 
      self.label.config(fg = 'lightgreen') 
      TL1.button.config(fg = 'lightgreen',activeforeground='lightgreen') 


     if TL.selectedP.get() =='Red': 
      self.label.config(fg = 'red') 
      TL1.button.config(fg = 'red',activeforeground='red') 


     if TL.selectedP.get() =='Orange': 
      self.label.config(fg = 'orange') 
      TL1.button.config(fg = 'orange',activeforeground='orange') 


     if TL.selectedP.get() =='Yellow': 
      self.label.config(fg = 'yellow') 
      TL1.button.config(fg = 'yellow',activeforeground='yellow') 


     if TL.selectedP.get() =='Light Green': 
      self.label.config(fg = 'lightgreen') 
      TL1.button.config(fg = 'lightgreen',activeforeground='lightgreen') 


     if TL.selectedP.get() =='Normal': 
      self.label.config(fg = 'lightgreen') 
      TL1.button.config(fg = 'lightgreen',activeforeground='lightgreen') 


     if TL.selectedP.get() =='Steel Blue': 
      self.label.config(fg = 'steelblue1') 
      TL1.button.config(fg = 'steelblue1',activeforeground='steelblue1') 


     if TL.selectedP.get() =='Blue': 
      self.label.config(fg = 'blue') 
      TL1.button.config(fg = 'blue',activeforeground='blue') 


     if TL.selectedP.get() =='Green': 
      self.label.config(fg = 'darkgreen') 
      TL1.button.config(fg = 'darkgreen',activeforeground='darkgreen') 



     if TL.selectedP.get() =='White': 
      self.label.config(fg = 'white') 
      TL1.button.config(fg = 'white',activeforeground='white') 


     if TL.selectedP.get() =='Black': 
      self.label.config(fg = 'black') 
      TL1.button.config(fg = 'black',activeforeground='black') 

    def H (self,event): 


     TL.entryVariableS.set(TL.sclS.get()) 

     S = TL.sclS.get() 

    def I (self,event): 

     S1 = TL.entryVariableS.get() 


     TL.sclS.set(S1) 

     TL.sclS.set(TL.sclS.get()) 

     S1 = TL.entryVariableS.get() 


     TL.sclS.set(S1) 


    def J (self): 
     s = self.wm_geometry() 
     geomPatt = re.compile(r"(\d+)?x?(\d+)?([+-])(\d+)([+-])(\d+)") 

     m = geomPatt.search(s) 
     X3 = m.group(4) 
     Y3 = m.group(6) 

     M = int(Y3) - 5000 






     self.update_idletasks() 
     self.wm_geometry("+" + str(X3) + "+" + str(M)) 


     TL1.wm_geometry("+0+5000") 





# Loop 

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.mainloop() 

답변

0
def I (self,event): 
    S1 = TL.entryVariableS.get() 
    TL.sclS.set(S1) 
    TL.sclS.set(TL.sclS.get()) 
    S1 = TL.entryVariableS.get() 
    TL.sclS.set(S1) 

TL.entryVariableS.get() "반환"(빈 문자열); 당신은 그것을 점검하고 적절히 처리해야한다 (기본값을 주거나 사용자에게 불평 함).