在下面的代码中,我可以使用USB条形码扫描仪扫描UPC代码并获取该12位数字字符串并使用BASH脚本(称为bss)对其进行搜索,该脚本使用,Lynx ,找到该产品并将所有需要UN的文本删除到描述中。
问题在于标签的更新次数似乎有限制。在名为def get_key(self, event)
的函数中,我可以让标签更新两次。在状态框中显示UPC代码并将标签重置回" Ready ..."。对该标签的任何更新仅导致显示最后定义的标签。它永远不会介于两者之间。
为什么呢?在第二个函数def get_info(self)
中,我只能更新一次。这是产品信息,直到我再次扫描然后更新到扫描的新项目,这很好,但不是理想的结果,这是将标签更改为"等待... &#34 ;.任何信息或指导将不胜感激。
#!/usr/bin/python
import Tkinter as tk
from Tkinter import *
import subprocess
class ShopApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
frameCenter = Frame(self)
frameCenter.configure(height=50, width=300, background='#dddbe3')
frameCenter.propagate(0)
frameCenter.pack(side=TOP)
frameStatus = Frame(self, padx=2, pady=2)
frameStatus.configure(height=30, width=300)
frameStatus.propagate(0)
frameStatus.pack(side=BOTTOM)
self.mdItemAdded = tk.Label(frameCenter, text="Waiting...")
self.mdItemAdded.config(font=('sans', 12, 'bold'))
self.mdItemAdded.pack(side=BOTTOM, fill=X)
self.code = ' '
self.status = tk.Label(frameStatus, text="Ready...")
self.status.config(height=20, bd=1, relief=SUNKEN, anchor=W)
self.status.pack(side=BOTTOM, fill=X)
self.bind('<Key>', self.get_key)
#Getting Barcode scan
def get_key(self, event):
if event.char in '0123456789':
self.code += event.char
self.status['text'] = "UPC Code: " + self.code
elif self.status == self.status:
self.status.after(3000)
self.status['text'] = "Ready..."
self.get_info()
self.code = ' '
#Displaying Results
def get_info(self):
result = subprocess.call('/home/pi/python/shop/bss ' + (self.code), shell=True)
if result == 0:
self.f = open ('final.txt', 'r')
self.line = self.f.readline()
self.f.close()
self.mdItemAdded.config(text="Item Added...\n" + self.line)
self.mdItemAdded.update_idletasks()
self.mdItemAdded.after(4000)
self.mdItemAdded.config(text="Waiting...")
shopper = ShopApp()
shopper.mainloop()
答案 0 :(得分:1)
我已更新了我的问题,以反映最终解决了我的问题的代码中的更正。
修复方法是:
self.mdItemAdded.update_idletasks()
self.mdItemAdded.after(4000)
self.mdItemAdded.config(text="Waiting...")
添加到def_get_info(self)
函数的末尾。我希望这可以帮助任何可能遇到同样问题的人。