Python 2.7 Tkinter,更新标签并在之后使用

Python 2.7 Tkinter,更新标签并在之后使用,python-2.7,tkinter,Python 2.7,Tkinter,在下面的代码中,我可以使用USB条形码扫描仪扫描UPC代码,并获取12位数字字符串,然后使用名为bss的BASH脚本对其进行搜索,该脚本使用、Lynx进入互联网,找到该产品,并将所有不需要的文本剥离到描述中 问题在于,标签的更新次数似乎有限制。在名为def get_keyself的函数中,event I可以获取要更新两次的标签。在状态框中显示UPC代码,并将标签重置回就绪状态。。。。对该标签的任何更新只会显示最后定义的更新。这两者之间没有任何区别 为什么??在第二个函数def get_infos

在下面的代码中,我可以使用USB条形码扫描仪扫描UPC代码,并获取12位数字字符串,然后使用名为bss的BASH脚本对其进行搜索,该脚本使用、Lynx进入互联网,找到该产品,并将所有不需要的文本剥离到描述中

问题在于,标签的更新次数似乎有限制。在名为def get_keyself的函数中,event I可以获取要更新两次的标签。在状态框中显示UPC代码,并将标签重置回就绪状态。。。。对该标签的任何更新只会显示最后定义的更新。这两者之间没有任何区别

为什么??在第二个函数def get_infoself中,我只能让它更新一次。这就是产品信息,直到我再次扫描,然后更新到扫描的新项目,这很好,但不是期望的结果,这是将标签更改回等待。。。。如有任何信息或指导,将不胜感激

#!/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()

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

解决办法是:

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

添加到def_get_infoself函数的末尾。我希望这有助于任何可能遇到相同问题的人。

您的一些缩进是不正确的。另外,你能不能写一个示例程序,不需要我们运行一些问题中没有包含的特殊脚本?FWIW,你可以更改标签的次数是绝对没有限制的。我算出来了。我必须将self.mdItemAdded.update_idletasks添加到def get_infoself函数的底部。我更新了我的代码以反映工作更改。如果修改问题中的代码以使其正常工作,将使阅读此问题的所有人感到困惑。要么在答案中填入答案,要么删除此问题。