self.a = QtGui.QRadioButton()
self.b = QtGui.QRadioButton()
当我有一个数组时: arr = ["a","b","c"....."x","z"]
如何让它更高效而不是 26 倍?
最佳答案
很多时候,您不需要保留对按钮的本地引用。在这种情况下,只要它们有一个负责销毁它们的父小部件,您就可以放心地忘记它们。
使用 QButtonGroup
及其全局信号buttonClicked
还将帮助以通用方式管理一组按钮。但您也可以使用 partial
将每个按钮连接到单个插槽。传输用户定义的数据,帮助您识别哪个按钮生成了回调。
import sys
import string
from PyQt5 import QtWidgets, QtCore
class Window(QtWidgets.QDialog):
def __init__(self):
super().__init__()
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.letters = list(string.ascii_lowercase)
self.lay = QtWidgets.QVBoxLayout(self)
self.group = QtWidgets.QButtonGroup()
# Create all the buttons
for letter in self.letters:
btn = QtWidgets.QRadioButton(letter, self)
# In case you want to find it back later using findChild
btn.setObjectName("btn_"+letter)
self.group.addButton(btn)
self.lay.addWidget(btn)
self.group.buttonClicked.connect(self.btnCliked)
def btnCliked(self, btn):
# Do something with the button
print(btn.text())
def main():
qApp = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(qApp.exec_())
if __name__ == '__main__':
main()
部分
示例:
from functools import partial
[...]
for letter in self.letters:
btn = QtWidgets.QRadioButton(letter, self)
self.lay.addWidget(btn)
btn.clicked.connect(partial(self.btnClicked, letter))
[...]
def btnCliked(self, letter):
print(letter)
关于python - 如何在 python 中创建复选框或单选按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29445148/