Im folgenden Code kann ich einen UPC-Code mit einem USB-Barcode-Scanner scannen und nehmen Sie diese 12-stellige numerische Zeichenfolge und eine Suche auf sie mit einem BASH-Skript (genannt Bss), die erlischt mit dem Internet, Lynx, und finden Sie das Produkt und strippen Sie alle UN-benötigten Text auf die Beschreibung.Tkinter, Aktualisierung Etikett und Verwendung nach
Das Problem ist, dass es eine Beschränkung gibt, wie oft ein Etikett aktualisiert werden kann. In der Funktion def get_key(self, event)
kann ich das Label zweimal aktualisieren. Die Anzeige des UPC-Codes im Status-Frame und das Zurücksetzen des Labels auf "Ready ...". Jede weitere Aktualisierung dieses Etiketts führt nur zur Anzeige des zuletzt definierten Etiketts. Es vergisst alles dazwischen.
Warum? In der zweiten Funktion def get_info(self)
kann ich es nur einmal aktualisieren. Das ist zu den Produktinformationen, und das bleibt, bis ich wieder scanne und dann aktualisiert, um das neue Element gescannt, was in Ordnung ist, aber nicht die gewünschten Ergebnisse, die die Änderung des Etiketts zurück zu "Warten ..." ist. Jede Information oder Anleitung wäre willkommen.
#!/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 '':
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()
einige Ihrer Einrückung ist falsch. Können Sie bitte auch ein Beispielprogramm schreiben, das nicht die Ausführung eines speziellen Skripts erfordert, das nicht in der Frage enthalten ist? –
FWIW, es gibt absolut keine Begrenzung wie oft man ein Etikett ändern kann. –
Ich habe es herausgefunden. Ich musste 'self.mdItemAdded.update_idletasks()' am Ende der 'def get_info (self)' Funktion hinzufügen. Ich habe meinen Code aktualisiert, um die Änderungen widerzuspiegeln. –