Stanley Robinson Ответов: 1

Графический интерфейс Tkinter реализован с помощью отдельного файла Python с функциями


У меня возникли проблемы с наличием графического интерфейса, который будет реализован через второй файл, который просто содержит файл для чтения, сделанные графики и некоторые новые функции, которые будут оценены на основе этого.

Я пытаюсь создать графическое приложение с помощью Tkinter. Я поступаю следующим образом. У меня есть фоновый сценарий (скажем Background.py) который имеет две функции. Функция X загружает файл данных, выполняет некоторые вычисления и выводит график. Я хочу вызвать это с помощью графического интерфейса в другом файле (GUI.py) который открывает панель с кнопкой и когда я нажимаю на кнопку функция X в файле Background.py следует оценить и показать сюжет. Как только я проверю график, я могу нажать другую кнопку, чтобы закрыть график и завершить функцию X. Теперь я могу нажать другую кнопку, чтобы вызвать функцию Y в файле Background.py Эти кнопки должны позволить мне ввести три значения, которые должны быть входными данными для функции Y в файле Background.py. Как только я нажму эту кнопку, она должна вызвать функцию Y и сделать то, что она просит ее сделать. Теперь, в конце концов, после этого я могу нажать кнопку, чтобы закрыть графический интерфейс.

Как я могу это сделать?. Общая грубая идея будет полезна.

Я привел пример, насколько мог:( по крайней мере, скелет кода)
У меня есть фоновый файл скажем (Background.py) и графический файл ( допустим GUI.py)

**Background.py**

import numpy
import matplotlib.pyplot as plt
import pandas

def progX():
     df = pd.read (myfile)

     ##df.stats # doing something and generating a plot from the file

    plt.boxplot(df['col'])

    plt.show()

def progY(y1, y2,y3):

    ## get the y1, y2, y3 from the GUI interface which the user has entered

    #run a code...  and generate an output file

**GUI.py**
import Background as bg   
    from tkinter import *
    from tkinter.ttk import *
    
    class GUI ():
        
        def create widgets(self):
            #....
        
        def create_panel2(self):
            #create buttons
            panel1 = ...
            btn1 = Button(panel1, text="yyyyy", command=bg.progA)
            btn1.pack() 
        
        def create_panel2(self):
            #create buttons
            panel2 = ...
            btn2 = Button(panel1, text="yyyyy", command=bg.progB)
            btn2.pack() 
    
    All_Entries = []
    
    window = Tk()
    D=GUI(window)
    window.mainloop()
    runprogram1 = bg.progX()
    runprogram2 = bg.probY(x, y, z)

Теперь мой вопрос заключается в том, имеет ли смысл все вышесказанное? Как я могу вызвать фоновые функции из графического интерфейса? Заявления runprogram1 &амп; runprogram2, безусловно, не правильно, Как я могу реализовать это. Кроме того, как я гарантирую, что вызову proram Y в фоновом режиме, как только закрою вывод из программы X?

Я думаю, что вопросы имеют смысл. Я новичок в GUI и с трудом справляюсь с этим, что мне и нужно. любая помощь будет очень признательна.

Что я уже пробовал:

Я попытался поместить скелет в код.. Но пока ничего не работает.

1 Ответов

Рейтинг:
1

Richard MacCutchan

Да, вышеприведенный подход выглядит правильным, хотя у вас, похоже, есть разные имена программ, прикрепленные к вашим кнопкам. В общих чертах графическое приложение начинается с пустого окна. Затем он отображает информацию, основанную на входных данных пользователя. Поэтому, когда вы нажимаете кнопку (или выбираете пункт меню), она делает одно из двух:
1. идите прямо к производству отображения данных в соответствии с дизайном, или
2. Покажите всплывающее окно, которое запрашивает у пользователя некоторые входные данные, которые повлияют на отображаемые данные.
Это будет повторяться до тех пор, пока пользователь нажимает кнопки или выбирает пункты меню.