将对象属性值解析为窗口小部件textvariable

时间:2017-10-19 19:50:41

标签: python-3.x class tkinter

我正在python3 tkinter开发一个基本的六边形瓷砖游戏(只是为了好玩和学习)。但是,我找不到从对象((?<!.*\d+)(\d+))解析属性值(self.att_coord)到称为Hexagon的tkinter小部件(Label)选项的方法。我们的想法是在底部窗口小部件中显示这些值,类似于显示任何棋盘游戏的坐标。

到目前为止,我可以在IDLE中打印()这些值。以下代码显示到目前为止已达到的(只是复制/过去/运行)。

任何帮助都表示赞赏。

textvariable

2 个答案:

答案 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)

使用set()方法http://effbot.org/tkinterbook/label.htm

添加/更改textvariable