【问题标题】:Is there a possibility to assign a value to a tkinter button?是否有可能为 tkinter 按钮分配一个值?
【发布时间】:2020-08-17 03:39:20
【问题描述】:

我想制作一款战舰游戏,每个玩家将不同的战舰放在 10 x 10 的场地上。要知道船的位置,如果单击了按钮,我想将变量从 False 更改为 True。按钮的颜色也应该变为黑色,但如果它已经是黑色,它应该变回灰色,并且变量应该再次为假。 在我的代码中,我只为按钮定义了一个类。 master 应该是一个框架。需要命令“放置命令”,因为我需要这些按钮用于第二帧和另一个命令。 bentuzung 表示使用它的人(在我的情况下是 1 或 2)。 所以我正在寻找一种将变量分配给按钮的方法。代码也不能太长。

from tkinter import *

class buttons():
    def __init__(self, master, benutzung):
        self.button_list = []
        for j in range(10):
            for m in range(10):
                btn = Button(master, text = "     ")
                btn.grid(row = j, column = m)
                self.button_list.append(btn)
        self.put_command(benutzung)
    def put_command(self, benutzung):
        if benutzung == 1:
            for x in self.button_list:
                x.configure(command = lambda bt = x: self.set_ship(bt))
    def set_ship(self, btn):
            btn.configure(bg = "black")

【问题讨论】:

  • 请尝试将代码缩减为minimal reproducible example。如果您询问如何将值与按钮相关联,我们只需要一两个按钮。如果我们可以用两个按钮解决问题,我们可以解决 100 个按钮。顺便说一句,您应该考虑将按钮制作成一个循环。这将使代码更容易修改。

标签: python-3.x tkinter


【解决方案1】:

所以我自己找到了解决方案。您可以只创建一个新属性,例如'num' 并为其赋值。然后你可以通过'btn.num'获取值。

代码:

from tkinter import *

class buttons():
    def __init__(self, master, benutzung):
        self.button_list = []

        for j in range(10):
            for m in range(10):

                self.btn = Button(master, text = "     ", bg = "grey")
                self.btn.grid(row = j, column = m)
                self.btn.num = 1
                self.button_list.append(self.btn)
        self.put_command(benutzung)
    def put_command(self, benutzung):
        if benutzung == 1:
            for x in self.button_list:
                x.configure(command = lambda bt = x: self.set_ship(bt))
    def set_ship(self, btn):
        if btn.num == 1:
            btn.configure(bg = "black")
            btn.num = 0
        elif btn.num == 0:
            btn.configure(bg = "grey")
            btn.num = 1


【讨论】:

    【解决方案2】:

    您可以将textvariable 参数与IntVar() 一起使用。

    所以你的按钮是:

    num = IntVar()
    b = Button(master, text = "str", textvariable = num)
    b.pack()
    

    希望这会有所帮助!

    【讨论】:

    • 当我尝试这个时它说'未知选项:-变量'编辑:它适用于'textvariable'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多