我现在使用的解决方案是 QScrollArea,其中包含 QVBoxLayout 中的 QRadioButtons 列表。它的样式可能不像 QListWidget,但它可以满足我的需要。
这是我正在使用的代码:
from PyQt5.QtWidgets import QApplication, QRadioButton, QButtonGroup, QScrollArea, QWidget, QVBoxLayout
import sys
class QRadioButtonListWidget(QScrollArea):
def __init__(self, inputList, signalConnect=None, parent=None):
super(QRadioButtonListWidget, self).__init__(parent)
self.inputList = inputList
self.signalConnect = signalConnect
self.initUI()
if not signalConnect is None:
self.btnGroup.buttonClicked.connect(self.connector)
def initUI(self):
layout = QVBoxLayout()
self.btnGroup = QButtonGroup()
for i, elem in enumerate(self.inputList):
btn = QRadioButton(str(elem))
self.btnGroup.addButton(btn, i)
layout.addWidget(btn)
widget = QWidget()
widget.setLayout(layout)
self.setWidget(widget)
def connector(self, btn):
self.signalConnect(self.btnGroup.id(btn))
def printId(id):
print("id clicked: " + str(id))
app = QApplication(sys.argv)
w = QRadioButtonListWidget([1, 2, 3, "A", "B", "C"], printId)
w.show()
app.exec_()