Использование существующих объектов и функций Python в графическом интерфейсе с пользовательским кодом

Вопрос или проблема

Предположим, что у меня есть несколько существующих объектов и функций на Python, которые я хочу инициировать через графический интерфейс и ввести некоторый пользовательский код для работы с ними.

Например:

Obj1 и Obj2 — это два экземпляра класса, которые имеют атрибут .value. f1 и f2 — это некоторые функции. Эти классы и функции уже существуют в каком-то файле Python src.py, который у меня локально.

Теперь я хочу, чтобы мои студенты могли инициировать столько экземпляров этих объектов (Obj1, Obj2), сколько захотят, создать систему на основе правил (пользовательскую) и затем выполнить эти функции (f1, f2).

Простое правило могло бы быть, например:
Если Obj1.value больше, чем Obj2.value, выполните f1, в противном случае выполните f2.

вставьте описание изображения здесь

Какое простое в использовании графическое программное обеспечение будет уместно для этого? Пользовательский код не обязательно должен быть на Python, но поскольку он довольно простой, это было бы предпочтительно.

Я думаю, что это возможно с помощью Apache Nifi или Node-RED (не уверен!). Также это возможно реализовать (без недельных усилий) с использованием tkinter?

Дополнительная информация, которая может быть актуальна:
Класс, экземпляры которого называются Obj1 и Obj2, содержит подписки на MQTT, так что .value обновляется часто. Функции f1 будут делать API POST запросы, а f2 будет записывать значение в базу данных.

Посмотрите на [Boa Constrictor]http://boa-constructor.sourceforge.net/). Также поиск в Google – я не помню название, но несколько лет назад я нашел несколько бесплатных приложений, которые генерировали графический интерфейс, если ваш код на Python использует argparse.

Ага, Google говорит Gooey (также см. здесь).

Возможно https://github.com/codypiersall/cligui, хотя на странице GitHub автор сам говорит “Пусть люди посмотрят на Gooey”.

Я уверен, что было как минимум еще одно, но сейчас не могу его найти.

Используете ли вы argparse? Если нет, вам следует это сделать.

Ответ или решение

Чтобы создать графический интерфейс пользователя (GUI) для работы с уже существующими объектами и функциями на Python, вы можете использовать библиотеку tkinter, которая является стандартной и простой в использовании для создания GUI-приложений. Чаще всего tkinter подходит для создания приложений, которые не требуют сложной визуализации или значительных усилий по дизайну.

Вот пример, как вы можете организовать ваш проект:

  1. Структура файла: Предположим, у вас есть файл src.py с определением классов Obj1 и Obj2, а также функциями f1 и f2.
# src.py
class Obj1:
    def __init__(self, value):
        self.value = value

class Obj2:
    def __init__(self, value):
        self.value = value

def f1():
    print("Executed f1")

def f2():
    print("Executed f2")
  1. Создание GUI с использованием tkinter: Теперь создадим графический интерфейс в другом файле, например, main.py, который позволит вашим студентам вводить значения и настраивать правила.
import tkinter as tk
from tkinter import messagebox
from src import Obj1, Obj2, f1, f2

class App:
    def __init__(self, root):
        self.root = root
        self.root.title("Rule-Based Execution GUI")

        self.obj1_value = tk.DoubleVar()
        self.obj2_value = tk.DoubleVar()

        tk.Label(root, text="Obj1 Value:").grid(row=0, column=0)
        tk.Entry(root, textvariable=self.obj1_value).grid(row=0, column=1)

        tk.Label(root, text="Obj2 Value:").grid(row=1, column=0)
        tk.Entry(root, textvariable=self.obj2_value).grid(row=1, column=1)

        tk.Button(root, text="Execute", command=self.execute_rule).grid(row=2, columnspan=2)

    def execute_rule(self):
        obj1 = Obj1(self.obj1_value.get())
        obj2 = Obj2(self.obj2_value.get())

        if obj1.value > obj2.value:
            f1()  # Вызов функции f1
            messagebox.showinfo("Result", "Executed f1")
        else:
            f2()  # Вызов функции f2
            messagebox.showinfo("Result", "Executed f2")

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()
  1. Запуск приложения: Убедитесь, что у вас установлены необходимые библиотеки, и выполните файл main.py. Открывается окно, в котором студенты могут ввести значения для Obj1 и Obj2, а затем нажать кнопку «Execute», чтобы запустить соответствующую функцию в зависимости от заданного условия.

  2. Расширение возможностей: Вы можете добавить функционал для создания множественных объектов, добавления других правил и логики, а также улучшить интерфейс, чтобы он был более удобным для пользователей.

  3. Использование других библиотек: Если ваши требования к интерфейсу становятся более сложными (например, вам нужны графики, панели и т.д.), вы можете рассмотреть использование библиотек, таких как PyQt или Kivy. Кроме того, как вы упомянули, Gooey — это еще один вариант, который позволяет создавать интерфейсы на основе аргументов командной строки, что может быть полезно для более простого GUI.

В заключение, tkinter — это отличный старт для создания простого пользовательского интерфейса, который удовлетворяет вашим требованиям.

Оцените материал
Добавить комментарий

Капча загружается...