Как реализовать PySimple GUI, чтобы добавить GUI в уже существующий скрипт - PullRequest
0 голосов
/ 25 марта 2020

Для начала у меня есть простой скрипт ( skipper.py ), код здесь:

import pyautogui as pg
from pynput.keyboard import Key, Controller, Listener

# ===== Config =====

keyboard = Controller()
delay = 1
start_key = Key.f2
stop_key = Key.f3
exit_key = Key.f4

# ===== Config =====

stop = True
running = True

class MechanicSkipper:

    def handle_on_press(self, key):
        global running, stop

        if key == start_key:
            stop = False
        elif key == stop_key:
            stop = True
        elif key == exit_key:
            running = False

    def main(self):
        lis = Listener(on_press=self.handle_on_press)
        lis.start()

        while running:
            if not stop:
                pg.click(pg.position(1427, 926))
                pg.stop = delay
        lis.stop()

В основном, если я нажму F1, он будет нажимать в позиции 1427, 926 на моем экране. Как только я нажму F2, он остановится, и F3 программа прекратит работу. По сути, это скрипт имитации кликов с задержкой, потому что я не хочу, чтобы он постоянно спамял клики.

Я пытаюсь реализовать простой GUI для целей обучения, который по сути будет описан так :

*Simple small window*
ProgramName by NameHere

Controls:
F1 = Start
F2 = Stop
F3 = Exit

---------------------------- Some kind of border/separator here
Press F1 to Start...

И затем после нажатия клавиши F1 «Нажмите F1 для запуска ...» изменится на:

ProgramName теперь активно!

или

ProgramName теперь неактивен!

Как видите, супер просто.

Насколько я понимаю после просмотра документов для PySimple GUI, поскольку я хочу динамически обновлять информацию в GUI / окне мне нужно создать постоянное окно (многократное чтение с использованием события l oop + обновляет данные в окне) вместо одного окна.

С учетом сказанного вот что я до сих пор ( Skipper_ gui .py ):

import skipper
import PySimpleGUI as sg

sg.theme('Dark Blue 3')

layout = [
    [sg.Text('ProgramName by NameHere')],
    [sg.Text('Controls:')],
    [sg.Button('F1 (Start)')],  # Figure out how to trigger a button w/ a hotkey
    [sg.Button('F2 (Stop)')],  # Figure out how to trigger a button w/ a hotkey
    [sg.Button('F3 (Exit)')],  # Figure out how to trigger a button w/ a hotkey

#  Line separator here of some kind

]

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

while True:
    event, values = window.read()
    print(event, values)
    if event == 'F1 (Start)':
        #  how to insert my start code from skipper.py here?
    elif event == 'F2 (Stop)':
        #  how to insert my stop code from skipper.py here?
    elif event == 'F3 (Exit)':
        # how to insert my exit code from skipper.py here?


window.close()

Как вы видите, я пытаюсь понять, как "позвонить?" мои функции / код из Skipper.py в кнопки Skipper_ gui .py's F1 / F2 / F3. Я пытаюсь посмотреть на некоторые примеры из документации как можно больше, но я в тупике и могу использовать точку в правильном направлении.

...