Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-PyQt5如何处理GUI';是否将复选框作为分隔对象?_Python_Qt5_Pyqt5 - Fatal编程技术网

Python-PyQt5如何处理GUI';是否将复选框作为分隔对象?

Python-PyQt5如何处理GUI';是否将复选框作为分隔对象?,python,qt5,pyqt5,Python,Qt5,Pyqt5,我对研究Qt和Python的Qt非常陌生;我对PyQt5复选框对象有问题。 在下面的代码中,当我选中一个复选框时,我得到一个重定向到已连接函数的信号。 如果框被选中或取消选中,它会正确地显示出来,但是我的脚本似乎混淆了哪个框的状态发生了变化。 例如,如果我检查第一个对象,那么在第一个对象之后执行的所有检查都会显示绑定到最早对象的名称值,就像它们实际上都是同一个对象或具有相同的地址一样。相反,如果我选中并取消选中一个复选框,那么下一个选中的复选框将返回绑定到输出中特定复选框的正确名称。 我做错了什

我对研究Qt和Python的Qt非常陌生;我对PyQt5复选框对象有问题。 在下面的代码中,当我选中一个复选框时,我得到一个重定向到已连接函数的信号。 如果框被选中或取消选中,它会正确地显示出来,但是我的脚本似乎混淆了哪个框的状态发生了变化。 例如,如果我检查第一个对象,那么在第一个对象之后执行的所有检查都会显示绑定到最早对象的名称值,就像它们实际上都是同一个对象或具有相同的地址一样。相反,如果我选中并取消选中一个复选框,那么下一个选中的复选框将返回绑定到输出中特定复选框的正确名称。 我做错了什么

以下是课程代码:

class window_gui(QMainWindow):
def __init__(self):
    QtWidgets.QMainWindow.__init__(self)
    mainWindow = loadUi("utilities/mygui_gui.ui", self)
    self.setWindowTitle("window name")
    #checkBox per selezione uno: sensore sul checked yes or not
    mainWindow.checkOne.clicked.connect(self.selectBooks)
    # checkBox per selezione due: sensore sul checked yes or not
    mainWindow.checkTwo.toggled.connect(self.selectBooks)
    # checkBox per selezione tre: sensore sul checked yes or not
    mainWindow.checkThree.toggled.connect(self.selectBooks)
    # checkBox per selezione quattro: sensore sul checked yes or not
    mainWindow.checkFour.toggled.connect(self.selectBooks)
    # checkBox per selezione cinque: sensore sul checked yes or not
    mainWindow.checkFive.toggled.connect(self.selectBooks)

def selectBooks(self, toggle):
    if toggle == QtCore.Qt.Checked:
        if self.checkOne.isChecked():
            print(self.checkOne.text(), "1")
        elif self.checkTwo.isChecked():
            print(self.checkTwo.text(), "2")
        elif self.checkThree.isChecked():
            print(self.checkThree.text(), "3")
        elif self.checkFour.isChecked():
            print(self.checkFour.text(), "4")
        elif self.checkFive.isChecked():
            print(self.checkFive.text(), "5")
        else:
            print("error")
        print('Checked')
    else:
        print('Unchecked')

选中
checkOne
并单击
checkTwo
时,输入
selectBooks
。 在该函数中,您输入
if else
-语句,第一个条件是
self.checkOne.isChecked()
,它仍然是
True
,因此您可以
打印(self.checkOne.text(),“1”)
,尽管您刚刚单击了
checkTwo

您可以为每个
QCheckBox
(选项1)创建一个插槽,否则您需要告诉您的插槽刚刚单击了哪个
QCheckBox
(请参见选项2)

您还必须使用
stateChanged
信号

选择1

from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class window_gui(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.checkOne = QtWidgets.QCheckBox('one')
        self.checkTwo = QtWidgets.QCheckBox('two')
        self.vlayout = QtWidgets.QVBoxLayout()
        self.vlayout.addWidget(self.checkOne)
        self.vlayout.addWidget(self.checkTwo)
        self.setLayout(self.vlayout)
        self.checkOne.stateChanged.connect(self.selectBooks1)
        self.checkTwo.stateChanged.connect(self.selectBooks2)

    def selectBooks1(self, toggle):
        if toggle == QtCore.Qt.Checked:
            print('checked 1')
        else:
            print('unchecked 1')

    def selectBooks2(self, toggle):
        if toggle == QtCore.Qt.Checked:
            print('checked 2')
        else:
            print('unchecked 2')

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = window_gui()
    w.show()
    app.exec()
选项2():


非常感谢,这就是我要找的
from PyQt5 import QtWidgets, QtCore, QtGui
import sys

class window_gui(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.checkOne = QtWidgets.QCheckBox('one')
        self.checkTwo = QtWidgets.QCheckBox('two')
        self.vlayout = QtWidgets.QVBoxLayout()
        self.vlayout.addWidget(self.checkOne)
        self.vlayout.addWidget(self.checkTwo)
        self.setLayout(self.vlayout)
        self.checkOne.stateChanged.connect(lambda state=self.checkOne.isChecked(), no=1: self.selectBooks(state, no))
        self.checkTwo.stateChanged.connect(lambda state=self.checkTwo.isChecked(), no=2: self.selectBooks(state, no))

    def selectBooks(self, toggle, no):
        if toggle == QtCore.Qt.Checked:
            print('checked '+str(no))
        else:
            print('unchecked '+str(no))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = window_gui()
    w.show()
    app.exec()