python - 如何在 python 中创建复选框或单选按钮?

标签 python

 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/

相关文章:

Python,不休眠的倒数计时器

python - 比较两个列表并找到唯一值

python - 如何在 python 中创建自定义 xmlrpc 故障错误

Python 请求 - 如何使用系统 ca 证书(debian/ubuntu)?

python - 查找在 Python 中重新定义之前使用的 __metaclass__

python - Flask Restful API url

python - 为什么某些 mysql 连接在删除 + 插入后选择 mysql 数据库中的旧数据?

python - 获取目录中每个文件的最后修改时间

Python 3 - pip install --user 标志找不到安装

python - Django - 无法使用信号删除对象更改时的旧文件