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