【问题标题】:How to implement a ever running loop within a PySimpleGUI code?如何在 PySimpleGUI 代码中实现一个不断运行的循环?
【发布时间】:2023-03-10 03:25:01
【问题描述】:

我无法在任何地方解决问题,所以我想是时候自己发布这个问题了。

这是我的代码:

import serial
from serial import Serial
import PySimpleGUI as sg



ser = serial.Serial('COM3', 115200, timeout=1)
read = False

sg.theme('DarkAmber')
layout = [  [sg.InputText(), sg.Button('Empfindlichkeit einstellen')],
            [sg.Button('start'), sg.Button('end')] ]

window = sg.Window('Window Title', layout)



while True:
    event, values = window.read()

    if read == True:
        reading = ser.readline()
        print(reading[0:256])

    if event == "start":
        read = True

    if event == sg.WIN_CLOSED or event == 'end':
        break

window.close()

GUI 显示得非常好,没有错误。但问题出在以下部分:

    if read == True:
        reading = ser.readline()
        print(reading[0:256])

当我按下“开始”按钮一次时,这部分代码应该连续运行。但它没有。这部分代码只执行一次,只要我按一次开始,然后按任何其他按钮。我该如何解决这个问题?

【问题讨论】:

  • readline() 的调用将被阻塞,直到收到换行符。您需要将操作设为非阻塞,或将其移至可接受阻塞的专用非 GUI 线程。

标签: python user-interface pysimplegui


【解决方案1】:
event, values = window.read()

它会停在这里等待事件发生。第一次点击“开始”按钮后,

if event == "start":
    read = True

在该事件之后将变量read 设置为True,然后再次返回window.read() 以等待另一个事件。没有更多活动了,请稍等。

为了避免在那里等待事件,您可以在方法window.read() 中使用选项timeout 来确定等待多长时间。

event, values = window.read(timeout=100)    # 100 ms to wait

选项timeout,如果没有其他GUI事件首先发生,等待读取将返回的毫秒数。默认事件或键是__TIMEOUT__

【讨论】:

  • 就是这样。
猜你喜欢
  • 2023-01-08
  • 1970-01-01
  • 2011-11-26
  • 2019-02-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多