Qt Python - 在按钮列表中更改所有按钮的颜色,直到被单击的按钮
Qt Python - in a list of buttons change color of all buttons up until the one that was clicked
我有一个像这样的 Qt 按钮列表:self.buttons = [button1, button2, button3]
单击一个按钮时,我希望列表中被单击按钮之前的所有按钮都更改其颜色。
我制作了一个 for 循环来遍历按钮并将每个按钮连接到我定义的函数,但是当我单击按钮并且连接的函数运行时,它不知道按钮中按钮的顺序列表,因此我不能让其他按钮改变颜色。我在想我需要以某种方式将按钮的 ID 或其他东西传递给函数,但无法弄清楚该怎么做,因为我无法将参数传递给连接的函数:self.button1.clicked.connect(self.change_color)
一个参数由 Qt 本身自动传递给连接的函数,但它是主要的 window,对我的情况没有帮助:
def change_color(i):
print(i)
点击时输出:
<__main__.Main_Window(0x6000019e0000, name="MainWindow") at 0x11df5ccc0>
将所有按钮添加到 QButtonGroup (using their index as id) and then connect to the group's idClicked signal。这将自动发送点击按钮的索引。下面是一个简单的演示,展示了如何做到这一点:
import sys, random
from PySide2 import QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
self.buttons = QtWidgets.QButtonGroup(self)
for index in range(1, 11):
button = QtWidgets.QPushButton(f'Button {index}')
self.buttons.addButton(button, index)
layout.addWidget(button)
self.buttons.idClicked.connect(self.handleButtons)
def handleButtons(self, index):
color = f'#{random.randint(0, 0xFFFFFF):06x}'
for index in range(1, index):
self.buttons.button(index).setStyleSheet(f'background: {color}')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setWindowTitle('Test')
window.show()
sys.exit(app.exec_())
我有一个像这样的 Qt 按钮列表:self.buttons = [button1, button2, button3]
单击一个按钮时,我希望列表中被单击按钮之前的所有按钮都更改其颜色。
我制作了一个 for 循环来遍历按钮并将每个按钮连接到我定义的函数,但是当我单击按钮并且连接的函数运行时,它不知道按钮中按钮的顺序列表,因此我不能让其他按钮改变颜色。我在想我需要以某种方式将按钮的 ID 或其他东西传递给函数,但无法弄清楚该怎么做,因为我无法将参数传递给连接的函数:self.button1.clicked.connect(self.change_color)
一个参数由 Qt 本身自动传递给连接的函数,但它是主要的 window,对我的情况没有帮助:
def change_color(i):
print(i)
点击时输出:
<__main__.Main_Window(0x6000019e0000, name="MainWindow") at 0x11df5ccc0>
将所有按钮添加到 QButtonGroup (using their index as id) and then connect to the group's idClicked signal。这将自动发送点击按钮的索引。下面是一个简单的演示,展示了如何做到这一点:
import sys, random
from PySide2 import QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
self.buttons = QtWidgets.QButtonGroup(self)
for index in range(1, 11):
button = QtWidgets.QPushButton(f'Button {index}')
self.buttons.addButton(button, index)
layout.addWidget(button)
self.buttons.idClicked.connect(self.handleButtons)
def handleButtons(self, index):
color = f'#{random.randint(0, 0xFFFFFF):06x}'
for index in range(1, index):
self.buttons.button(index).setStyleSheet(f'background: {color}')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setWindowTitle('Test')
window.show()
sys.exit(app.exec_())