Python Tkinter应用程序在导入时的行为与直接执行时的行为不同

Python Tkinter应用程序在导入时的行为与直接执行时的行为不同,python,python-2.7,tkinter,tk,Python,Python 2.7,Tkinter,Tk,我正在尝试构建一个GUI 当我直接执行应用程序(即双击python文件)时,得到的结果(控制台输出)与导入(mainloop)不同 我希望它提供以下控制台输出: c d e f g - from app 因为我希望主循环在作为模块导入后可以访问 我试图通过外部文件将其作为模块导入,使输入和输出可控。 我在运行文件时获得了预期的输出,但当我将其作为模块导入时,它似乎在运行主循环,因为我获得了Tkinter mainloop窗口输出 代码如下: class Application(Frame):

我正在尝试构建一个GUI

当我直接执行应用程序(即双击python文件)时,得到的结果(控制台输出)与导入(mainloop)不同

我希望它提供以下控制台输出:

c
d
e
f
g - from app
因为我希望主循环在作为模块导入后可以访问

我试图通过外部文件将其作为模块导入,使输入和输出可控。

我在运行文件时获得了预期的输出,但当我将其作为模块导入时,它似乎在运行主循环,因为我获得了Tkinter mainloop窗口输出

代码如下:

class Application(Frame):

    def __init__(self, master = None):
        Frame.__init__(self, master)
    
        self.text = Lines()
        self.text.insert("\n\n\n\n\n")
    
        self.waitingForInput = False
        self.inText = ""
    
        self.pack()
        self.widgets()

    def widgets(self):
        self.L1 = Label(self)
        self.L1["text"] = self.text.bottomLines
        self.L1.pack(side = "top")
    
        self.E1 = Entry(self)
        self.E1["width"] = 40
        self.E1.pack(side = "top")

        self.B1 = Button(self)
        self.B1["text"] = "Enter",
        self.B1["command"] = self.giveInput
        self.B1.pack(side = "top")

    def giveInput(self):
        if self.waitingForInput:
            self.inText = self.B1.get()
            self.waitingForInput = False

    def getInput(self, output):
        giveOutput(output)
    
        self.waitingForInput = True
        while True:
            time.sleep(0.1)
            if not self.waitingForInput:
                break
        return self.inText

    def giveOutput(self, output):
        self.text.insert(output)
        self.L1["text"] = self.text.bottomLines
        print self.text.bottomLines + " - from app"

root = Tk()
app = Application(master = root)
app.giveOutput("a \n b \n c \n d \n e \n f \n g")
Lines
类本质上是一个字符串中文本行的堆栈,使用
insert(x)
堆叠更多行,并使用
底线访问堆栈的最后五行

回到主题,当作为模块导入时,它运行主循环,带有一个标签,其中包含我假设的5条空行、一个输入框和
“Enter”
按钮。我不要这个。我希望得到与直接运行文件时相同的结果,正如我前面所示

我只想在调用
app.mainloop
方法时显示该框


我做错了什么,怎么做错了,如何纠正?

这只会在直接运行模块时运行,而不会在导入模块时运行:

if __name__ == "__main__":
    root = Tk()
    app = Application(master = root)
    app.giveOutput("a \n b \n c \n d \n e \n f \n g")

谢谢这是如何导致循环启动的?在python中导入模块时,将执行该模块的内容。这里的if语句防止仅当从另一个模块导入时才实例化应用程序类。它将执行init方法,然后调用while循环所在的getInput方法。这是否意味着我必须从单独的文件创建应用程序对象?