Я уже некоторое время пытаюсь разобраться с этой проблемой, но я в тупике.
Я работаю над текстовой сюжетной игрой для класса, и у меня появилась идея поместить сценарий в другой файл, чтобы им было проще управлять. Это означает, что у меня есть основная функция, которая запускает графический интерфейс, который принимает ввод, отправляет его в файл сценария, файл сценария решает, какой текст должен отображаться, и вызывает функцию в основной функции, которая отображает выбранный текст.
Моя проблема в том, что каждый раз, когда вызывается функция main для отображения текста, создается новое окно с этим текстом. Эта проблема возникает только тогда, когда я вызываю функцию извне main.
Мне нужно, чтобы вывод отображался в существующем окне из отдельного файла, а не создавал новое окно.
мой код здесь (главный вверху, скрипт внизу):
MAIN
from tkinter import *
import script
class GUI(Frame):
def __init__(self):
self.root.geometry("300x400")
Frame.__init__(self, self.root)
self.create_widgets()
def create_widgets(self):
self.grid()
self.text = Text(self, height=10, width=40, fg="black", bg="dark khaki") # Output box
self.vsb = Scrollbar(self, orient="vertical",command=self.text.yview) # Scrollbar
self.text.configure(yscrollcommand=self.vsb.set)
self.text.grid(column=0, row=0)
self.root.bind('<Return>', self.input) # I forgot to mention, I have the enter key set to returning whatever's in the input box
self.submit = Entry(self, width=30, bg="grey")
self.submit.grid(column=0, row=1) # input box
def input(self, event):
inp = self.submit.get() # get what's in the input box
self.submit.delete(0, END) # clear the output box
script.Script().inputP2(inp) # sending the input to
def insert(self, indent, inserting):
if indent: # I have two different settings to make inserting text easier
self.text.insert(END, "\n{}".format(inserting))
if not indent:
self.text.insert(END, inserting)
self.text.see("end") # jump to the bottom of the output box
def start(self):
self.insert(False, "Game by me")
self.root.mainloop()
def __str__(self):
return str(self)
if __name__ == "__main__":
GUI().start()
SCRIPT
import main
from tkinter import *
class Script():
def __init__(self):
pass
def inputP2(self, inp):
if inp == "try":
main.GUI().insert(False, "sucess!")
# The real script is much longer, this is just an example