Tkinter GUI реализован с отдельным файлом Python с функциями - PullRequest
0 голосов
/ 19 октября 2018

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

Я пытаюсь создать приложение с графическим интерфейсом, используя 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 определенно не верны, как я могу это реализоватьТакже, как я буду гарантировать, что я вызову программу Y в фоновом режиме, как только я закрою вывод из программы X?

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

1 Ответ

0 голосов
/ 20 октября 2018

Я предполагаю progA == progX и progB == progY?

Поскольку ваш код в настоящее время структурирован, некоторые функции в графическом интерфейсе должны получить y1, y2и y3 из виджета (Entry(), предположительно) и перейдите к progY.progY не может получить эту информацию, b / c progY не знает о виджетах в графическом интерфейсе.Получите эти значения в классе GUI, привязав кнопку к другой функции, которая 1) вызывает .get() в виджете Entry(), а затем 2) передает эти значения в progY.

Сделайте ваши поля ввода вGUI:

e1 = Entry(panel1)
e2 = Entry(panel1)
e3 = Entry(panel1)
self.entries = (e1, e2, e3)
for e in self.entries:
    e.pack()

Создайте функцию, которая получает значения и вызывает progY в графическом интерфейсе:

def get_entries_call_y(self):
    e = [x.get() for x in self.entries]
    bd.progY(e[0], e[1], e[2])

Свяжите свою кнопку с get_entries_call_y (не с bd.progY):

btn2 = Button(panel1, text="yyyyy", command=get_entries_call_y)

Если вам нужен совет по структурированию программы с графическим интерфейсом в целом, попробуйте придерживаться (насколько это возможно) стандартной архитектуры интерфейса пользователя, такой как модель-представление-контроллер (https://en.wikipedia.org/wiki/Model-view-controller).).Решение, которое я описал выше, должно заставить вашу программу работать, но то, как вы структурировали вашу программу, по многим причинам не очень хороший способ сделать это. Изучение MVC поможет вам определить, какая задача должна входить в какую функцию /класс / файл, предоставит вам логическую основу для добавления функций и улучшения кода и позволит более эффективно создавать новые программы с графическим интерфейсом.

Или, по крайней мере, это то, что я получил после изучения MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...