次のコードでは、USBバーコードスキャナを使用してUPCコードをスキャンし、その12桁の数値文字列を取り出して、BASHスクリプト(bssという)で検索しますLynxを使ってインターネットに接続し、その製品を見つけて、必要なすべてのテキストを説明まで削除します。Tkinter、ラベルを更新してから使用する
問題は、ラベルを更新できる回数に制限があるようです。 def get_key(self, event)
という関数では、ラベルを2回更新することができます。ステータスフレームにUPCコードが表示され、ラベルが「Ready ...」にリセットされます。そのラベルに対する更なる更新だけが、最後に定義されたものの表示をもたらす。それはすべての間に気にしない。
なぜですか? 2番目の関数def get_info(self)
では、一度しか更新できません。それは製品情報です。もう一度スキャンして新しい項目をスキャンするまで残っていますが、これはうまくいきますが、目的の結果ではなく、「待っています...」に戻っています。どんな情報や指導にも感謝します。
#!/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()
インデントの一部が正しくありません。また、質問に含まれていない特殊なスクリプトを実行する必要のないサンプルプログラムを作成してください。 –
FWIWでは、何回ラベルを変更できるかに制限はありません。 –
私はそれを理解しました。 'def get_info(self)'関数の最後に 'self.mdItemAdded.update_idletasks()'を追加しなければなりませんでした。私はコードを更新して、変更を反映させました。 –