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 你好吗”应该打印多少次。第二个输入定义了打印字母之间的延迟,因此当给出开始时,它开始打印给定的句子,但是当按下停止时,它不会停止。相反,我必须从终端终止应用程序,如何通过按停止按钮来停止应用程序
您的脚本将被
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()