我正在创建一个有趣的RPG状态窗口(就像当你在rpg中升级,并为某些属性添加技能点数时)。我现在只是尝试创建状态窗口(显示球员的名字,统计数据,以及基于他们的统计数据的职业,等等)。
这就是我到目前为止所知道的:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("300x300")
counter = IntVar()
def increase_stat(event=None):
counter.set(counter.get() + 1)
def decrease_stat(event=None):
counter.set(counter.get() - 1)
rnum = 0
for stat in ["Str","Int","Dex"]:
Label(root, text=stat).grid(row=rnum, column=0)
Label(root, textvariable=counter).grid(row=rnum+1, column=1)
Button(root, text="+", command=increase_stat).grid(row=rnum+1, column=0)
Button(root, text="-", command=decrease_stat).grid(row=rnum+1, column=2)
rnum = rnum + 2
root.mainloop()
这是到目前为止这段代码的结果:
我遇到的问题是,按下任何统计数据的"+“或"-”按钮都会影响其他所有统计数据,而不仅仅是我正在单击的统计数据。例如,单击"Str“下的"+”按钮将+1添加到"Str“中,而不是将+1添加到所有三个统计数据中。
我只是刚刚开始,所以我将添加更多的这三个统计信息(比如显示一个角色是基于统计信息的职业),所以任何帮助都将不胜感激。
发布于 2018-08-22 09:24:52
您需要创建一个变量来记录每个标签的增量和减量;您还必须指明必须更改哪个计数器。
也许是这样的?
import tkinter as tk
root = tk.Tk()
root.geometry("300x300")
def increase_stat(event=None, counter=None):
counter.set(counter.get() + 1)
def decrease_stat(event=None, counter=None):
counter.set(counter.get() - 1)
counters = [tk.IntVar() for _ in range(3)]
rnum = 0
for idx, stat in enumerate(["Str", "Int", "Dex"]):
tk.Label(root, text=stat).grid(row=rnum, column=0)
tk.Label(root, textvariable=counters[idx]).grid(row=rnum+1, column=1)
tk.Button(root, text="+", command=lambda counter=counters[idx]: increase_stat(counter=counter)).grid(row=rnum+1, column=0)
tk.Button(root, text="-", command=lambda counter=counters[idx]: decrease_stat(counter=counter)).grid(row=rnum+1, column=2)
rnum = rnum + 2
root.mainloop()
https://stackoverflow.com/questions/51956780
复制相似问题