Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter实时数据标签更改(取决于用户输入)_Python_Python 3.x_User Interface_Tkinter - Fatal编程技术网

Python tkinter实时数据标签更改(取决于用户输入)

Python tkinter实时数据标签更改(取决于用户输入),python,python-3.x,user-interface,tkinter,Python,Python 3.x,User Interface,Tkinter,所以我试图编写一个中世纪的RPG,我用Tkinter显示用户的健康、耐力、控制等等。我试图让用户拥有50的基本耐力,如果他们按下“攻击”按钮,耐力将减少5,并随着时间慢慢恢复,(如果当前STM低于50,它将开始每毫秒增加1点,直到再次达到50)。每次按下“攻击”按钮时,减法都会起作用,但我似乎无法让我的if(耐力

所以我试图编写一个中世纪的RPG,我用Tkinter显示用户的健康、耐力、控制等等。我试图让用户拥有50的基本耐力,如果他们按下“攻击”按钮,耐力将减少5,并随着时间慢慢恢复,(如果当前STM低于50,它将开始每毫秒增加1点,直到再次达到50)。每次按下“攻击”按钮时,减法都会起作用,但我似乎无法让我的
if(耐力
语句起作用。有什么提示吗

import time
import sys
import random as rand
from tkinter import *

# -----------------------------------Custom Functions---------------------------------------

def dramaticeffect():
    time.sleep(2)
    print("")

def delay_print(s):
    for c in s:
        sys.stdout.write(c)
        sys.stdout.flush()
        time.sleep(0.1)
    time.sleep(1)
    print("")

def die():
    delay_print("Your adventure has ended, " + name + ".")
    sys.exit()

def endprogress():
    print("[This is the end of the game's current progress]")
    die()

def actionlog():
    global log
    log = log + 1
    action = True
    print("\t inputlog#" + str(log))
    logcheck.configure(text="*")

def attack():
    global stamina
    stamina = int(stamina - 5)
    print(stamina)
    stmcount = ("Stamina: " + str(stamina) + "/" + str(stmmax))
    stmmeter.configure(text=stmcount)
    live = True
    actionlog()

'''
def uistart():
    window = Tk()
    window.title("Fate of all")
    uidefault()

def uidefault():
    label = Label(window, text="Testing")
    entry = Entry(window)
    button1 = Button(window, text="Enter")
    button2 = Button(window, text="SB_1")
    button3 = Button(window, text="SB_2")

def uihalt():
    label.pack()
    entry.pack()
    button1.pack()
    button2.pack()
    button3.pack()

    window.mainloop()
'''

# ---------------------------------------Gameplay-------------------------------------------

window = Tk()
window.title("Fate of all")

log = int(0)

live = False

stmmod = int(0)
stamina = int(50 + stmmod)
stmmax = int(50 + stmmod)

if (stamina < stmmax):
    time.sleep(0.1)
    stamina = stamina + 1
    print(stamina)

stmcount = ("Stamina: " + str(stamina) + "/" + str(stmmax))

#damage

stmmeter = Label(window, text=stmcount)
entry = Entry(window)
button1 = Button(window, text="Enter", command=actionlog)
button2 = Button(window, text="Attack", command=attack)
button3 = Button(window, text="Defend", command=actionlog)
logcheck = Label(window, text="")

stmmeter.pack()
entry.pack()
button1.pack()
button2.pack()
button3.pack()
logcheck.pack()

window.mainloop()



#name = input("This is the tale of... ")

#dramaticeffect()

#delay_print('''
#Greetings, Sir ''' + name + ''', I am a humble traveler like you. Allow me to tell you a
#story, a tale of a friend or two.
#''')

#delay_print('''
#\t It is a desolate time, there are wars between sword and stone all
#across the land...and you were but a simple knight trying to survive,
#but everything changed once you entered the outer lands of Newlochia.
#''')

#delay_print("Fate of all is in your hands.")

#dramaticeffect()
导入时间
导入系统
随机导入为rand
从tkinter进口*
#------------------------------------自定义函数---------------------------------------
def戏剧效果():
时间。睡眠(2)
打印(“”)
def延迟打印:
对于s中的c:
系统标准写入(c)
sys.stdout.flush()
睡眠时间(0.1)
时间。睡眠(1)
打印(“”)
def die():
延迟打印(“你的冒险已经结束,“+name+”)
sys.exit()
def endprogress():
打印(“[游戏当前进度到此结束]”)
死()
def actionlog():
全局日志
log=log+1
动作=正确
打印(“\t inputlog#”+str(log))
logcheck.configure(text=“*”)
def攻击():
全球耐力
耐力=智力(耐力-5)
版画(耐力)
stmcount=(“耐力:”+str(耐力)+“/”+str(stmmax))
配置(text=stmcount)
真实的
actionlog()
'''
def uistart():
window=Tk()
窗口标题(“所有人的命运”)
uidefault()
def uidefault():
标签=标签(窗口,text=“测试”)
入口=入口(窗口)
button1=按钮(窗口,text=“回车”)
button2=按钮(窗口,text=“SB_1”)
button3=按钮(窗口,text=“SB_2”)
def uihalt():
label.pack()
entry.pack()
按钮1.pack()
按钮2.pack()
按钮3.pack()
window.mainloop()
'''
#-------------------------------------游戏性-------------------------------------------
window=Tk()
窗口标题(“所有人的命运”)
log=int(0)
活=假
stmmod=int(0)
耐力=智力(50+stmmod)
stmmax=int(50+stmmod)
如果(耐力
首先,当Tk实例中有一个if语句时,显然它只运行一次,其次,在GUI应用程序中使用
time.sleep(some_num)
不是一个好主意,因此最好使用
root.after(millis,func)
并在函数中使用它。 这还取决于您希望在何时何地运行函数。如果您希望它在角色受到攻击时运行,则可以执行类似操作,将其绑定到按钮,或在已绑定到按钮的其他函数中调用它:

def regenerate():
    global stamina
    if stamina < stmmax:
        stamina += 1
        root.after(60, regenerate)
        # root.after works with millis so it is better to use
        # a bigger number like 60 rather than 1
与textvariable相同的代码:

from tkinter import *


root = Tk()
root.title("Game!")
root.geometry("400x300")
stamina, stmmax = 50, 50
regenerating = False
lbl = Label(root, text=f"Stamina: {stamina}")
lbl.pack(pady=15)

def add_stamina():
    global stamina, regenerating
    if stamina < stmmax:
        stamina += 1
        lbl.config(text=f"Stamina: {stamina}")
        root.after(100, add_stamina)
    else:
        regenerating = False

def attack():
    global stamina, regenerating
    stamina -= 15
    lbl.config(text=f"Stamina: {stamina}")
    if not regenerating:
        regenerating = True
        add_stamina()

Button(root, text="Attack!", command=attack).pack()
root.mainloop()
from tkinter import *


root = Tk()
root.title("Game!")
root.geometry("400x300")
stamina, stmmax = 50, 50
regenerating = False
stm_var = StringVar()
stm_var.set(f"Stamina: {stamina}")
lbl = Label(root, textvariable=stm_var)
lbl.pack(pady=15)

def add_stamina():
    global stamina, regenerating
    if stamina < stmmax:
        stamina += 1
        stm_var.set(f"Stamina: {stamina}")
        root.after(100, add_stamina)
    else:
        regenerating = False

def attack():
    global stamina, regenerating
    stamina -= 15
    stm_var.set(f"Stamina: {stamina}")
    if not regenerating:
        regenerating = True
        add_stamina()

Button(root, text="Attack!", command=attack).pack()
root.mainloop()
从tkinter导入*
root=Tk()
root.title(“游戏!”)
根几何(“400x300”)
耐力,stmmax=50,50
再生=假
stm_var=StringVar()
stm_变量集(f“Stamina:{Stamina}”)
lbl=标签(根,textvariable=stm\u var)
磅包装(帕迪=15)
def添加_耐力():
全球耐力,再生
如果耐力<最大值:
耐力+=1
stm_变量集(f“Stamina:{Stamina}”)
根.后(100,增加耐力)
其他:
再生=假
def攻击():
全球耐力,再生
耐力-=15
stm_变量集(f“Stamina:{Stamina}”)
如果没有再生:
再生=真
添加_耐力()
按钮(root,text=“Attack!”,command=Attack).pack()
root.mainloop()

您应该在函数中执行恢复任务(添加
耐力
1),然后使用
after()
定期调用它。但是恢复
耐力
每毫秒有点太快,50毫秒后耐力将恢复到50。
from tkinter import *


root = Tk()
root.title("Game!")
root.geometry("400x300")
stamina, stmmax = 50, 50
regenerating = False
stm_var = StringVar()
stm_var.set(f"Stamina: {stamina}")
lbl = Label(root, textvariable=stm_var)
lbl.pack(pady=15)

def add_stamina():
    global stamina, regenerating
    if stamina < stmmax:
        stamina += 1
        stm_var.set(f"Stamina: {stamina}")
        root.after(100, add_stamina)
    else:
        regenerating = False

def attack():
    global stamina, regenerating
    stamina -= 15
    stm_var.set(f"Stamina: {stamina}")
    if not regenerating:
        regenerating = True
        add_stamina()

Button(root, text="Attack!", command=attack).pack()
root.mainloop()