我遇到以下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()
我希望能有人帮助我。
适用于我的机器。确切地说,你正在采取什么行动来造成坠机? – Kevin 2014-12-05 18:18:56
当我输入一个字符串并按回车时,方法“self.post”被调用并输出字符串到控制台。但是,如果“self.label4String.set(string)”这一行没有被注释掉,那么它就不会再运行。我无法输入任何字符(没有任何反应)。我也不能放弃他们在“X”上的节目。我正在使用Python 2.7。 – zwelch 2014-12-05 18:40:30
奇怪。我想知道这与Tkinter与线程应用程序的习惯性不兼容有什么关系。如果KeyDown回调在主线程之外执行,那么您可能会看到奇怪的和意外的行为。 – Kevin 2014-12-05 19:33:03