我已经尝试解决这个问题已有一段时间了,但是我很沮丧。 我正在上课的一款基于文本故事的游戏,我的想法是将脚本放入另一个文件中,以使其易于管理。这意味着我具有运行GUI的主要功能,该GUI接受输入,将其发送到脚本文件,脚本文件决定需要显示哪些文本,并在显示所选文本的主函数中调用一个函数。 / p>
我的问题是,每次调用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()
脚本
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
答案 0 :(得分:0)
让主函数调用脚本函数,然后再调用主脚本函数不是一个好主意。为了执行您在开头提到的将“脚本”部分分开的想法,我们应该将其完全分开,以便它是一个构建基块,以后可以在需要时再次使用。让脚本进行处理,然后返回处理结果回到main,该处理从GUI窗口处理事物的打印/擦除。
def input(self, event):
inp = self.submit.get() # get what's in the input box
self.submit.delete(0, END) # clear the output box
result = script.Script().inputP2(inp) # sending the input
self.insert(result)
# remove importing of main and tkinter in "script"
def inputP2(self, inp):
if inp == "try":
return (False, "sucess!")