Tkinter,更新标签并使用后

时间:2017-02-03 17:10:22

标签: python-2.7 tkinter

在下面的代码中,我可以使用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()

1 个答案:

答案 0 :(得分:1)

我已更新了我的问题,以反映最终解决了我的问题的代码中的更正。

修复方法是:

self.mdItemAdded.update_idletasks()
self.mdItemAdded.after(4000)
self.mdItemAdded.config(text="Waiting...")

添加到def_get_info(self)函数的末尾。我希望这可以帮助任何可能遇到同样问题的人。