2017-02-03 17 views
0

次のコードでは、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() 
+0

インデントの一部が正しくありません。また、質問に含まれていない特殊なスクリプトを実行する必要のないサンプルプログラムを作成してください。 –

+0

FWIWでは、何回ラベルを変更できるかに制限はありません。 –

+0

私はそれを理解しました。 'def get_info(self)'関数の最後に 'self.mdItemAdded.update_idletasks()'を追加しなければなりませんでした。私はコードを更新して、変更を反映させました。 –

答えて

1

私は最終的に私の問題を解決したコード内の修正を反映するために、私の質問を更新しました。

修正がある:

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

def_get_info(self)関数の末尾に追加しました。私は、これが同じ問題を横断する可能性のある人を助けることを願っています。

関連する問題