我正在嘗試運行一個回圈來檢查卡片是否已被掃描以及是否已被掃描并且有效然后切換到另一個螢屏。但是,如果我運行 while 回圈,程式會崩潰,如果我使用 .after ,則會出現遞回錯誤。我試圖限制 .after 運行的頻率,但它仍然崩潰。誰能幫我?謝謝
這是我的代碼:
from tkinter import *
import PIL
import serial
def MainScreen():
global mainscreen
mainscreen = Tk()
mainscreen.title('Main Screen')
mainscreen.geometry('400x400')
backgroundImage = PhotoImage(file="waves2.png")
backgroundLabel = Label(mainscreen, image=backgroundImage)
backgroundLabel.pack()
mainscreen.after(10000, Scan())
mainscreen.mainloop()
def Scan():
x = ""
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').rstrip()
x = line.strip()
print(x)
if x != '':
print("card accepted")
else:
print('scan card')
mainscreen.update()
mainscreen.after(10000, Scan())
if __name__ == '__main__':
ser = serial.Serial('COM3', 9600, timeout=1)
ser.flush()
主螢屏()
uj5u.com熱心網友回復:
(這是我第一次在 StackOverFlow 上回答問題)
在不同執行緒中運行回圈可能是答案
from tkinter import *
import threading
root = Tk()
root.geometry("500x700)
run = False
def Scan():
run = True
while run:
you code here
function = threading.Thread(target=Scan)
function.start()
root.mainloop()
run = False
uj5u.com熱心網友回復:
進入我腦海的主要選項是多執行緒。這是在與主程式完全不同的執行緒上運行事物的行程,并且非常常用。有了這個,您可以運行 while 回圈檢查掃描,而不會影響您的 tkinter 應用程式。它的模塊被稱為執行緒。這是一個很棒的教程:
https://www.geeksforgeeks.org/multithreading-python-set-1/
如果您不想走那么遠,您還可以查看 asyncio:
https://realpython.com/async-io-python/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366291.html
上一篇:從PandasDataframe中讀取資料并創建一棵樹并將其表示為字典
下一篇:如何將字串串列轉換為浮點串列
