尝试让单选按钮按下操作导致按钮的编号被打印到控制台。当前代码只打印“Button #_of_highest_button was pressed”,而不管实际按下的是哪个按钮。问题出在我设置信号的方式上,但我想不通。
signal button_pressed
func create_radio_button_matrix():
var row_count = len(Global.players) - 1
var index = Global.players.find(Global.active_player)
var players = Global.players.duplicate()
players.pop_at(index)
for player in players:
for row in row_count:
group = ButtonGroup.new()
for col in 4:
button = Button.new()
gray_foreground.add_child(button)
button.set_button_group(group)
button.position = Vector2(200 + 100 * col, 150 + 35 * row)
button.size = Vector2(95, 20)
button.toggle_mode = true
button.action_mode = BaseButton.ACTION_MODE_BUTTON_PRESS
button.text = str(row * 4 + col)
button.pressed.connect(_on_button_pressed)
if col == 1:
button.set_pressed_no_signal(true)
func _on_button_pressed():
print("Button " + button.text + " was pressed.")
看起来问题出在 _on_button_pressed 函数上。 “按钮”在函数上下文中不存在 您需要向 _on_button_pressed 函数添加一个参数,该函数将接收被按下的按钮对象
看来我需要使用lambda函数。最终代码是:
button.pressed.connect(func():_on_button_pressed(button))
func _on_button_pressed(button):
print("Button " + button.text + " was pressed.")