在“循环”中创建Windows' (蟒蛇)

时间:2015-02-03 01:04:22

标签: python function for-loop tkinter window

我一直在使用Python创建游戏,并在我的一个功能中

def Enemy_Party(enemies, party):
        def Sub_Fight(member, enemy, enemies, Prep):
            Prep.destroy()
            Fight(member, enemy, enemies)
        for x in enemies:
            Prep = Tk()
            for y in party:
                button = Button(Prep, text=y.name, command=Sub_Fight(y, x, enemies, Prep)).pack()
            Prep.mainloop()

创建了一个窗口,但没有任何内容。没有错误消息,空白窗口就在那里。

是的,我有一个函数Fight,它确实需要四个参数。两个人的敌人'和派对'被定义为列表,并且两者都有值(我已经检查过)。

就此而言,我有两个问题:"为什么程序在创建一个空白窗口后停止?"和"您可以在“For循环”中定义窗口吗?

如果您需要更多代码,请告诉我,并提前感谢。

2 个答案:

答案 0 :(得分:3)

该程序在第一次调用mainloop时暂停,因为mainloop的作用是什么 - 在您销毁窗口之前它不会返回。

您对如何创建窗口存在根本性的误解。每个tkinter应用程序都需要Tk单个实例。要创建其他窗口,您需要创建Toplevel的实例。然后,您需要拨打mainloop一次。

在您的代码中,通过调用Tk来取代对Toplevel的来电,然后移除您函数中对mainloop的调用。在创建所有小部件之后,您可能会在代码中的其他位置调用mainloop

答案 1 :(得分:0)

我注意到您在Tk()循环中定义了for。根据此循环迭代的次数,您可以创建 Tk()的许多实例,而实际上您永远不应创建多个实例。我建议在循环之外创建窗口并填充它,因为您需要使用循环(或者您可能决定使用的其他任何东西)。