Как я могу «объединить» мою основную программу с GUI? - PullRequest
0 голосов
/ 24 февраля 2020

Просто чтобы провести четкое различие между моими вопросами и множеством других вопросов здесь:

У меня уже написана «основная» программа (в которой есть классы, функции и переменные) и хороший кусок GUI.

Так что это не вопрос о как писать в tkinter или python, но более того, как я могу объединить их?

Должен ли я запускать программу из GUI? И import различные переменные, функции и классы? И если да, должен ли я import всю основную программу использования from до import каждого элемента, когда это необходимо?

Должен ли я создать третью программу, которая импортирует основную и the GUI?

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

1 Ответ

2 голосов
/ 24 февраля 2020

Вот пример структуры, которую я сделал для одного из моих проектов, содержащих Сервер (ваш фактический основной код), * ​​1019 * и третью программу, которую я назвал «Приложение», которая просто запускает 2. Я создал такие функции, как link_with_gui или link_with_server, чтобы вы могли получить доступ к переменным GUI с сервера и наоборот.

Чтобы запустить эту программу, вам просто нужно вызвать python app.py. Я добавил разделы if __name__ == '__main__' на сервере и GUI, чтобы вы могли запускать их независимо (для целей тестирования).

РЕДАКТИРОВАТЬ: я обновил свой код с потоками. На сервере у вас есть бесконечное число l oop, которое увеличивает переменную self.count каждую секунду, а в GUI, если вы нажмете кнопку, будет напечатано это число.

Приложение:

# app.py
from server import Server
from gui import GUI

class App:
    def __init__(self):
        self.gui = GUI()
        self.server = Server()
        self.link_parts()

    def link_parts(self):
        self.server.link_with_gui(self.gui)
        self.gui.link_with_server(self.server)

def main():
    app = App()
    app.gui.mainloop()

if __name__ == '__main__':
    main()

Сервер:

# server.py
import threading
import time

class Server:
    def __init__(self):
        self.count = 0
        thread = threading.Thread(target=self.counter)
        thread.daemon = True
        thread.start()

    def link_with_gui(self, gui):
        self.gui = gui

    def display(self):
        self.gui.chat_text.delete("1.0", "end")
        self.gui.chat_text.insert("insert", "This is Server count : {}".format(self.count))

    def counter(self):
        while True:
            self.count += 1
            time.sleep(1)
            print("self.count", self.count)

if __name__ == '__main__':
    server = Server()
    time.sleep(4)

GUI:

# gui.py
import tkinter as tk
class GUI(tk.Tk): # Graphic User Interface
    def __init__(self):
        super().__init__()
        self.btn = tk.Button(master=self, text="Click Me")
        self.btn.pack()

        self.chat_text = tk.Text(self, width=20, height=3)
        self.chat_text.pack()

    def link_with_server(self, server):
        self.server = server
        self.btn.configure(command=self.server.display)

if __name__ == '__main__':
    gui = GUI()
    gui.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...