python中开关_pyq中的开关按钮

本文介绍如何在PyQt5中使用开关按钮解决过滤器选择问题。用户可以在过滤器与其补码之间切换,并能禁用已选过滤器,增强交互体验。

可以用pyqt5创建一个开关按钮吗?在

我正在用pyqt5在python中设计一个过滤工具。用户甚至可以对其数据进行过滤或合并。在

我在qtablewidget中显示可能的过滤器,用户可以使用复选框选择要应用的过滤器。在每一行中,复选框都是独占的,即用户不能同时选择一个过滤器及其补码。在

但问题是,一旦我们选中了一行中的一个复选框,我们就不能取消选中它,除非我们选择了相反的复选框。

事实上,当过滤器刚刚加载时,所有的框都被取消选中(它们在某种程度上是空的),所以我可以选择应用哪个过滤器,但是当我想选择另一个过滤器时,前一个过滤器的其中一个框仍然处于选中状态(方框过滤器或方框补码被选中),我无法将其关闭。在

这就是为什么我考虑在每一行添加一个开关按钮来禁用过滤器。通过这样做,我将能够考虑是否考虑到选中的属性。在

下面是我想要的一个例子:

下面是一个可复制的例子from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(550, 350)

MainWindow.setMinimumSize(QtCore.QSize(550, 350))

MainWindow.setMaximumSize(QtCore.QSize(550, 350))

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)

self.tableWidget.setGeometry(QtCore.QRect(20, 20, 500, 200))

self.tableWidget.setObjectName("tableWidget")

self.tableWidget.setColumnCount(3)

self.tableWidget.setRowCount(0)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(0, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(1, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(2, item)

self.pushButton_Save = QtWidgets.QPushButton(self.centralwidget)

self.pushButton_Save.setGeometry(QtCore.QRect(120, 250, 100, 50))

self.pushButton_Save.setMinimumSize(QtCore.QSize(100, 50))

self.pushButton_Save.setMaximumSize(QtCore.QSize(100, 50))

self.pushButton_Save.setObjectName("pushButton_Save")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 550, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

item = self.tableWidget.horizontalHeaderItem(0)

item.setText(_translate("MainWindow", "Name"))

item = self.tableWidget.horizontalHeaderItem(1)

item.setText(_translate("MainWindow", "Filter"))

item = self.tableWidget.horizontalHeaderItem(2)

item.setText(_translate("MainWindow", "complement"))

self.pushButton_Save.setText(_translate("MainWindow", "Save"))

self.pushButton_Save.clicked.connect(self.bindSave)

def bindSave(self):

numRows = self.tableWidget.rowCount()

self.tableWidget.insertRow(numRows)

groupButton = QtWidgets.QButtonGroup(self.tableWidget)

groupButton.setExclusive(True)

it1 = QtWidgets.QTableWidgetItem("filter "+str(numRows))

self.tableWidget.setItem(numRows, 0, it1)

ch_bx1 = QtWidgets.QCheckBox()

groupButton.addButton(ch_bx1)

self.tableWidget.setCellWidget(numRows, 1, ch_bx1)

ch_bx2 = QtWidgets.QCheckBox()

groupButton.addButton(ch_bx2)

self.tableWidget.setCellWidget(numRows, 2, ch_bx2)

if __name__ == "__main__":

if not QtWidgets.QApplication.instance():

app = QtWidgets.QApplication(sys.argv)

else:

app = QtWidgets.QApplication.instance()

MainWindow = QtWidgets.QMainWindow()

ui = Ui_MainWindow()

ui.setupUi(MainWindow)

MainWindow.show()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值