前提・実現したいこと
「読み取りボタン」を押した際、code = repeat_barcode()でmyDataが呼び出される前にその下のprint("a")とStatic1["text"] = codeが実行されてしまいます。
codeにmyDataが入るまで、その下の処理が実行されないコードを作りたいです。
発生している問題・エラーメッセージ
def click(): code = 0 while code < 1: code = repeat_barcode() print("a") Static1["text"] = code など試してみましたがうまくいきませんでした。
該当のソースコード
python
1import sys 2import tkinter as tk 3from tkinter import ttk 4 5import os 6import time 7import numpy as np 8import pandas as pd 9from IPython import display 10from PIL import Image 11import cv2 12from datetime import datetime 13from pyzbar.pyzbar import decode 14 15box = [] 16after_id = None 17cap = cv2.VideoCapture(0) 18 19def click(): 20 code = repeat_barcode() 21 print("a") 22 Static1["text"] = code 23 24def repeat_barcode(): 25 print("ba-ko-do") 26 global after_id 27 global root 28 global cap 29 global box 30 #カメラから1コマのデータを取得する 31 ret,frame = cap.read() 32 for barcode in decode(frame): 33 #QRコードデータはバイトオブジェクトなので、カメラ上に描くために、文字列に変換する 34 myData = barcode.data.decode('utf-8') 35 print(myData) 36 box.append(myData) 37 if len(box) == 1: 38 return myData 39 after_id = root.after(100, repeat_barcode) 40 41def stop(): 42 global root 43 global after_id 44 root.after_cancel(after_id) 45 46root = tk.Tk() 47root.title(u"バーコード") 48root.geometry('400x400') 49button1 = tk.Button(root, text="読み取り", height=2,command=click) 50button1.pack(fill='x',padx=20,side='top') 51button2 = tk.Button(root, text="バーコード読み取りキャンセル",height=1, command=stop) 52button2.pack(fill='x',padx=20,side='top') 53Static1 = tk.Label(text=u'バーコード',font=("", 20)) 54Static1.pack(anchor='center',expand=1) 55root.mainloop()
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/11 03:46
2021/12/11 08:55
2021/12/13 07:30