2014-12-05 176 views
0

我遇到以下python腳本的問題。稍後,它將捕獲條形碼掃描儀的數據並將文本顯示爲標籤。但是,無論何時應該從標籤(突出顯示的行)更改文本,程序崩潰。我是一個絕對的初學者Python,無法解釋這一點。我註釋掉該行,該程序起作用。更改標籤文本不起作用

from Tkinter import * 
import pyHook 

class Application(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.master.title("Sc4nn0r") 
     self.variable = "Start Variable" 

     self.master.geometry("363x200") 
     self.master.resizable(0,0) 

     self.master.rowconfigure(0, weight = 1) 
     self.master.columnconfigure(0, weight = 1) 
     self.grid(sticky = W+E+N+S) 

     self.label4String = StringVar() 
     self.label4 = Label(self, textvariable=self.label4String) 
     self.label4.grid(row = 2, column = 1, columnspan = 2, sticky = W+E+N+S) 
     self.label4String.set("Variable1") 

     self.string = '' 
     hook = pyHook.HookManager() 
     hook.KeyDown = self.read 
     hook.HookKeyboard() 

    def read(self, event): 
     print(event.Ascii); 
     if event.Ascii != 13: 
      self.string = self.string + chr(event.Ascii) 
     else: 
      self.post(self.string.strip(' \0')) 
      self.string = '' 
     return True 

    def post(self,string): 
     self.label4String.set(string) # THIS LINE I Mean ########## 
     print(string) 


def main(): 
    Application().mainloop() 

if __name__ == '__main__': 
    main() 

我希望能有人幫助我。

+0

適用於我的機器。確切地說,你正在採取什麼行動來造成墜機? – Kevin 2014-12-05 18:18:56

+0

當我輸入一個字符串並按回車時,方法「self.post」被調用並輸出字符串到控制檯。但是,如果「self.label4String.set(string)」這一行沒有被註釋掉,那麼它就不會再運行。我無法輸入任何字符(沒有任何反應)。我也不能放棄他們在「X」上的節目。我正在使用Python 2.7。 – zwelch 2014-12-05 18:40:30

+0

奇怪。我想知道這與Tkinter與線程應用程序的習慣性不兼容有什麼關係。如果KeyDown回調在主線程之外執行,那麼您可能會看到奇怪的和意外的行爲。 – Kevin 2014-12-05 19:33:03

回答

1

我建議擺脫整個StringVar。相反,使用self.label4 = Label(self, text = "Variable1")。然後,只要您想更改標籤,就可以使用self.label4.config(text = string)

+0

這就是我第一次嘗試,它有同樣的效果。 – zwelch 2014-12-05 19:20:34

+0

在這種情況下,我們是否也可以看到最初的實施? – 2014-12-06 02:55:55