Я создал небольшой фиктивный проект, чтобы проиллюстрировать мою цель:
Приложение состоит из двух виджетов, кнопки и текстовой области. При нажатии кнопки вызывает другой модуль. Затем вызываемый модуль обращается к мэйнфрейму и обращается к функции «вставить текст», действуя как журнал кода, запущенного в вызываемом модуле. Ниже приведен простой пример того, чего я пытаюсь достичь.
Структура проекта:
main.py
from tkinter import *
import tkinter as tk
#from tkmacosx import Button ignore if not in MacOS
from another import module
class Example():
def __init__(self,parent):
self.main_frame = Frame(root)
self.main_frame.pack()
self.text = Text(self.main_frame)
self.text.grid(row = 0, column = 0)
self.button = Button(self.main_frame,
height = 25,
width = 150,
command = self.call_another_module)
self.button.grid(row = 1, column = 0)
self.new_text_line("Start.")
def call_another_module(self):
self.new_text_line("button press!\n")
module.Generic_class()
def new_text_line(self, message):
self.text.insert(INSERT, message + '\n')
if __name__ == '__main__':
root = Tk()
root.title("Example")
app = Example(root)
root.mainloop()
module.py
import tkinter as tk
#Shenanigans to import main
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)
import main
class Generic_class():
#code of something
#call new_text_line function
main.Example().new_text_line("Hurray!")
#continue code
Я знаю, что вызов основного модуля, как показано в приведенном выше примере, неверен, поскольку я снова вызываю экземпляр приложения.
Буду очень признателен за отзывы по этой конкретной проблеме и другим подходам к этой проблеме.