我正在尝试使用 PysimpleGUI 创建一个 PyGui 应用程序

问题描述 投票:0回答:1
import pyautogui
import time
import PySimpleGUI as sg


def main_app():
    try:
       layout = [[sg.Text('Enter the number of clicks to perform: '), sg.InputText()],
              [sg.Text('Enter the interval between messages (in seconds): '), sg.InputText()],
              [sg.Button('Start'), sg.Button('Stop')]]


    window = sg.Window('Automatic Clicker', layout)


    while True:
        event, values = window.read()
        if event == 'Start':
            num_clicks = int(values[0])
            type_interval = float(values[1])
            time.sleep(5)
            for i in range(num_clicks):
                pyautogui.click()
                time.sleep(10)
                pyautogui.typewrite("Hello, wORLD how are you", interval=5)
                pyautogui.press('enter')
                time.sleep(type_interval)
            time.sleep(5)

        if event == 'Stop' or event == sg.WINDOW_CLOSED:
            break

except Exception as e:
    print(f"An error occurred: {str(e)}")

finally:
    window.close()

if __name__ == "__main__":
    main_app()

我正在尝试使用 pysimplegui 创建 GUI 应用程序,这个应用程序非常简单,它有 2 个按钮启动、停止和两个输入字段,其中第一个字段需要输入“HELLO World 你好吗”应该打印多少次。第二个输入定义了打印字母之间的延迟,因此当给出开始时,它开始打印给定的句子,但是当按下停止时,它不会停止。相反,我必须从终端终止应用程序,如何通过按停止按钮来停止应用程序

python tkinter pyautogui pysimplegui pygui
1个回答
0
投票

您的脚本将被

for
循环和
time.sleep
调用阻塞,GUI 也不会响应,使用子线程来完成您的工作。

示例代码

import time
import datetime
import threading
import PySimpleGUI as sg

def job(window):
    global running
    while running:
        window.write_event_value('Event', datetime.datetime.now().strftime("%H:%M:%S"))
        time.sleep(0.1)

layout = [[sg.Button('Start'), sg.Button('Stop')]]
window = sg.Window('Threading', layout)
running, old = False, None

while True:

    event, values = window.read()

    if event == sg.WIN_CLOSED:
        running = False
        time.sleep(0.5)
        break

    elif event == 'Start' and not running:
        running = True
        window['Start'].update(disabled=True)
        threading.Thread(target=job, args=(window, ), daemon=True).start()

    elif event == 'Stop':
        running = False
        window['Start'].update(disabled=False)

    elif event == 'Event':
        now = values[event]
        if now != old:
            print(now)
            old = now

window.close()
© www.soinside.com 2019 - 2024. All rights reserved.