月/年时钟让我停止了我的游戏

2024-05-17 03:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Tkinter做了一个风险类型的游戏(有点接近帝国),我想做一个ingame的军队增援和金钱增益时钟。你知道吗

问题是:当我运行它时,while循环会停止游戏的其余部分。。。我怎么做一个时钟,是不是可怕的复杂,将增加变量。你知道吗

我的时钟代码是:

def timeclock(m,y):
    while m <= 12:
        time.sleep(30)
        m += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))
    else:
        m = 1
        y += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))

那个时钟配置走向我为游戏制作的标签,它显然只是刷新文本。你知道吗

你要知道,我不使用我的应用程序或.pack函数类,因为我最近开始使用Tkinter,我没有使用它们就学会了。尽管我像大多数中级python程序员一样理解类。请帮帮我!你知道吗


Tags: text游戏类型tkinterconfigure时钟year帝国
1条回答
网友
1楼 · 发布于 2024-05-17 03:18:55

您需要使用after方法来创建时钟,因为time.sleep会停止所有操作,直到它完成。你知道吗

看看这个例子。它创建一个标签和一个按钮,然后在100ms后运行timeclocktimeclock函数配置时钟,然后在100ms后再次调用自己。这不会中断Tkinter主循环,这就是为什么按钮仍然工作的原因。你知道吗

但是,只要不将应用程序放入类中,就必须使m和y成为全局的,才能在函数中使用它们,除非可以从标签文本中提取它们。你知道吗

import Tkinter as tk

def timeclock():
    global m, y
    if m < 12:
        m += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))
    else:
        m = 1
        y += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))
    root.after(100, timeclock)

def reset():
    global m, y
    m = 0
    y = 0

root = tk.Tk()
clock = tk.Label(root, text='Clock')
clock.pack()
m = 0
y = 0
button = tk.Button(root, text='Reset clock', command=reset)
button.pack()
root.after(100, timeclock)
root.mainloop()

要避免全局变量,可以执行以下示例中的操作。它通过查看标签得到月份和年份。你知道吗

import Tkinter as tk
import re

def timeclock():
    result = re.match('Month: (\d+), Year: (\d+)', clock['text'])
    m, y = int(result.group(1)), int(result.group(2))
    if m < 12:
        m += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))
    else:
        m = 1
        y += 1
        clock.configure(text = "Month: "+str(m)+", Year: "+str(y))
    root.after(100, timeclock)

def reset():
    m = 1
    y = 0
    clock.configure(text = "Month: "+str(m)+", Year: "+str(y))

root = tk.Tk()
m = 1
y = 0
clock = tk.Label(root, text="Month: "+str(m)+", Year: "+str(y))
clock.pack()
button = tk.Button(root, text='Reset clock', command=reset)
button.pack()
root.after(100, timeclock)
root.mainloop()

相关问题 更多 >