【问题标题】:How can I create multile checkboxes in a for loop?如何在 for 循环中创建多个复选框?
【发布时间】:2019-01-31 19:23:37
【问题描述】:

我刚刚开始使用 PyQt5 开发一个新的 python 项目。程序必须根据需要制作尽可能多的复选框。我正在尝试使用 for 循环。但是我无法使用复选框名称,因为每次使用 for 循环创建一个新复选框时它都会被覆盖。我的问题:在 for 循环完成后,如何查看选择了哪一次?

from PyQt5 import QtWidgets, uic, QtGui
from PyQt5.QtWidgets import *
from functies import dataOphalen
import os
import json

data = {}
checkLijst = []
alleVrucht = []


def radioAanmaken():
    col = 0
    for i in data:
        rij = 0
        lbl = QLabel(i)
        ui.gridcheck.addWidget(lbl,rij,col)
        rij+=1
        for b in data[i]:
            check = QCheckBox(b)
            ui.gridcheck.addWidget(check,rij,col)
            #save name in variable
            checkLijst.append({"naam":check,"col":col,"rij":rij,"vrucht":i})
            rij+=1
        check = QCheckBox(("Alle "+i))
        ui.gridcheck.addWidget(check,rij,col)
        alleVrucht.append({"naam":check,"vrucht":i})
        col+=1



app = QtWidgets.QApplication([])
ui = uic.loadUi("addNew.ui")
data = dataOphalen("percelen.json")
radioAanmaken()

ui.show()
app.exec()

编辑解决方案:

for i in range(ui.gridcheck.count()):
        checkb = ui.gridcheck.itemAt(i).widget()
        if checkb.isChecked():
            print(checkb.text())

【问题讨论】:

    标签: python python-3.x user-interface pyqt5


    【解决方案1】:

    您可以使用isChecked()查询是否选中了复选框。

    import sys
    from PyQt5.QtGui     import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore    import *
    
    class Window(QWidget):
        def __init__(self, many):
            super().__init__()
    
            self.layoutH = QHBoxLayout()
    
            for i in range(many):
                self.checkbox = QCheckBox("chBox-{}".format(i+1))
                self.checkbox.setCheckState(Qt.Unchecked)
    
                self.layoutH.addWidget(self.checkbox)
                self.layoutH.setAlignment(Qt.AlignCenter)
    
            self.label  = QLabel("selected QCheckBox: ")
            self.button = QPushButton("Query whether or not a checkbox is checked")
            self.button.clicked.connect(self.ButtonClicked)
    
            layoutV     = QVBoxLayout(self)
            layoutV.addLayout(self.layoutH)
            layoutV.addWidget(self.label)
            layoutV.addWidget(self.button)
    
        def ButtonClicked(self):
            checked_list = []
    
            for i in range(self.layoutH.count()):
                chBox = self.layoutH.itemAt(i).widget()
                if chBox.isChecked():
                    checked_list.append(chBox.text())
            self.label.setText("selected QCheckBox: " + str(list(checked_list)))  
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Window(7)
        window.resize(350, 300)
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      相关资源
      最近更新 更多