初始化一个充满 StringVar() 的板并使用 Tkinter 更新变量,Python
Initialise a board filled with StringVar() and update variables using Tkinter, Python
我正在实施十五岁的游戏,我意识到棋盘需要用字符串变量构建,以便稍后我可以更新它。我尝试使用以下内容:
d 是用户输入的尺寸(比如 3-> 3x3)
board = []
def initialize():
numbers = d * d - 1
global board
blankx = d - 1
blanky = d - 1
# Fill board with stringvars
v = tk.StringVar()
for j in range(d):
row = []
for i in range(d):
v.set(str(numbers))
row.append(v)
numbers -= 1
if numbers == 0:
v.set('_')
board.append(row)
我得到的是全零板,它应该是这样的:
8 7 6
5 4 3
2 1 _
有什么建议吗?另外,关于更新这些变量?
您的问题是您只创建了一个 StringVar
。您的问题陈述是您想要板上每个 space 一个,因此您需要在循环内创建变量:
for j in range(d):
v = tk.StringVar()
...
通常,您会使用一个按钮,在按下时向一个常用函数发送某种标识,然后更新它以及您想要执行的任何其他操作。一个简单的例子。
"""store the variable in a dictionary whose key is the
row and column number
"""
import sys
if sys.version_info[0] < 3:
import Tkinter as tk ## Python 2.x
else:
import tkinter as tk ## Python 3.x
from functools import partial
root=tk.Tk()
def callback(key):
if variables_dict[key].get() == "_":
variables_dict[key].set("Pushed")
else:
variables_dict[key].set("Error")
variables_dict={}
for j in range(3):
for k in range(5):
v = tk.StringVar()
## send same key to the callback function and use as
## dictionary's key
key="%02d-%02d" % (j, k)
## no need to keep a reference to the Button's class
## instance & all of not used modules within it
tk.Button(root, textvariable=v,
command=partial(callback, key)).grid(row=j,
column=k, sticky="nsew")
variables_dict[key]=v
v.set('_')
root.mainloop()
我正在实施十五岁的游戏,我意识到棋盘需要用字符串变量构建,以便稍后我可以更新它。我尝试使用以下内容: d 是用户输入的尺寸(比如 3-> 3x3)
board = []
def initialize():
numbers = d * d - 1
global board
blankx = d - 1
blanky = d - 1
# Fill board with stringvars
v = tk.StringVar()
for j in range(d):
row = []
for i in range(d):
v.set(str(numbers))
row.append(v)
numbers -= 1
if numbers == 0:
v.set('_')
board.append(row)
我得到的是全零板,它应该是这样的:
8 7 6
5 4 3
2 1 _
有什么建议吗?另外,关于更新这些变量?
您的问题是您只创建了一个 StringVar
。您的问题陈述是您想要板上每个 space 一个,因此您需要在循环内创建变量:
for j in range(d):
v = tk.StringVar()
...
通常,您会使用一个按钮,在按下时向一个常用函数发送某种标识,然后更新它以及您想要执行的任何其他操作。一个简单的例子。
"""store the variable in a dictionary whose key is the
row and column number
"""
import sys
if sys.version_info[0] < 3:
import Tkinter as tk ## Python 2.x
else:
import tkinter as tk ## Python 3.x
from functools import partial
root=tk.Tk()
def callback(key):
if variables_dict[key].get() == "_":
variables_dict[key].set("Pushed")
else:
variables_dict[key].set("Error")
variables_dict={}
for j in range(3):
for k in range(5):
v = tk.StringVar()
## send same key to the callback function and use as
## dictionary's key
key="%02d-%02d" % (j, k)
## no need to keep a reference to the Button's class
## instance & all of not used modules within it
tk.Button(root, textvariable=v,
command=partial(callback, key)).grid(row=j,
column=k, sticky="nsew")
variables_dict[key]=v
v.set('_')
root.mainloop()