我正在python3 tkinter开发一个基本的六边形瓷砖游戏(只是为了好玩和学习)。但是,我找不到从对象((?<!.*\d+)(\d+)
)解析属性值(self.att_coord
)到称为Hexagon
的tkinter小部件(Label
)选项的方法。我们的想法是在底部窗口小部件中显示这些值,类似于显示任何棋盘游戏的坐标。
到目前为止,我可以在IDLE中打印()这些值。以下代码显示到目前为止已达到的(只是复制/过去/运行)。
任何帮助都表示赞赏。
textvariable
答案 0 :(得分:1)
通常我们会在公共主服务器中创建一个变量,然后传递给小部件。但是,您将根作为单独的属性传递。您应该更改它,以便您的主类是tkinter.Tk
的子类:
这是一个小例子:
import tkinter
class EofCanvas(tkinter.Canvas):
def __init__(self, master, *args, **kwargs):
tkinter.Canvas.__init__(self, master=master, *args, **kwargs)
self.bind("<ButtonPress-1>", self.on_click)
def on_click(self, event):
self.master.status.set("CLICKED: {0.x}, {0.y}".format(event))
class UserInfoGame(tkinter.Frame):
def __init__(self, master, coord, *args, **kwargs):
tkinter.Frame.__init__(self, master=master, *args, **kwargs)
label = tkinter.Label(self, width=50, textvariable=self.master.status) #<--- Here the textvariable
label.pack()
class GameGUI(tkinter.Tk):
def __init__(self, map_size, *args, **kwargs):
tkinter.Tk.__init__(self, *args, **kwargs)
self.status = tkinter.StringVar() # we make the variable in a place where all widgets can reach it
canvas_game = EofCanvas(self, width=200, height=200, bg='white') # We pass "self", which includes all the instance variables
user_info_game = UserInfoGame(self, bd=1, relief='ridge', coord=canvas_game)
canvas_game.grid(column=1, row=1)
user_info_game.grid(column=1, row=2)
if __name__ == '__main__':
appstart = GameGUI(30) #the int spcifies the size of the board (int x int)
appstart.mainloop()
如果你将来做这样的小例子,我们将不胜感激,而不是要求我们挑选你的大量代码。
还有其他方法,但我认为这是最干净的。
答案 1 :(得分:0)