Skip to main content
 首页 » 编程设计

python之如何在 tkinter 中重新启动程序

2025年05月04日13over140

我正在使用 tkinter 编写一个简单的游戏,并希望在最后有一个选项能够重玩游戏,但我不确定我将如何去做。我希望能够回到我定义 init 的开始。还有一种方法可以做到这一点,而不必退出它,这样我就可以在玩家继续玩的时候保存分数。

from tkinter import * 
import random 
 
class App: 
    def __init__(self, master): 
        player_dice = [] 
        for i in range(1,6): 
            x = random.randint(1,6) 
            player_dice.append(x) 
            self.label = Label(master, text = x , fg = "red").grid(row =0, column =i+1) 
 
        self.label = Label(master, text = "Dice:" , fg = "red").grid(row =0, column =1) 
 
        self.hi_one = Button(master, text="one", command= lambda: say_one(player_dice)).grid(row = 1, column = 1) 
        self.hi_two = Button(master, text="two", command= lambda: say_two(player_dice)).grid(row = 1, column = 2)  

这里是我想添加一个按钮以循环回到 init 的地方。

def num(var, die, dlist): 
    new_window = Toplevel(root) 
    if die == 1: 
        if guess == total: 
            result = Message(new_window, text = "You Win").grid(row = 1, column = 1)  
        else: 
            result = Message(new_window, text = "You Lose").grid(row = 1, column = 1) 
            restart = Button(new_window, text = "Play Again", command = ?????).grid(row=1, column = 2)  

请您参考如下方法:

最简单的方法:

只需添加一个函数 resetBoard 即可重置您的游戏。 很明显,UI 的许多部分不需要重新设置,所以那些可以进入 __init__,其余可以进入 resetBoard(),你可以(可能)从 __init__ 中调用 resetBoard()。

正确的做法:

实现 MVC 或 MVP 模式:将数据和逻辑与 UI 分开。您的 View (UI) 应该反射(reflect)模型中的任何内容,然后重置游戏只是重置模型并触发正确事件的问题,以便更新 View (非常简单,但非常有用的模型 View XXX 模式不能只需几句话就能正确解释。)