я это простое окно (design.py) происходит от Qt дизайнера, который состоит из трех радиокнопок:PyQt: radioButton.isChecked() выполняется дважды
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.setEnabled(True)
MainWindow.resize(158, 110)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.myradioButton1 = QtGui.QRadioButton(self.centralwidget)
self.myradioButton1.setGeometry(QtCore.QRect(20, 10, 102, 22))
self.myradioButton1.setObjectName(_fromUtf8("myradioButton1"))
self.myradioButton2 = QtGui.QRadioButton(self.centralwidget)
self.myradioButton2.setGeometry(QtCore.QRect(20, 40, 102, 22))
self.myradioButton2.setObjectName(_fromUtf8("myradioButton2"))
self.myradioButton3 = QtGui.QRadioButton(self.centralwidget)
self.myradioButton3.setGeometry(QtCore.QRect(20, 70, 102, 22))
self.myradioButton3.setObjectName(_fromUtf8("myradioButton3"))
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.myradioButton1.setText(_translate("MainWindow", "RadioButton1", None))
self.myradioButton2.setText(_translate("MainWindow", "RadioButton2", None))
self.myradioButton3.setText(_translate("MainWindow", "RadioButton3", None))
и я добавил этот код , чтобы контролировать, какой переключатель установлен.
# -*- coding: utf-8 -*-
from PyQt4 import QtGui, QtCore
import sys
import design
class ExampleApp(QtGui.QMainWindow, design.Ui_MainWindow):
def __init__(self, parent=None):
super(ExampleApp, self).__init__(parent)
self.setupUi(self)
self.myradioButton1.toggled.connect(self.myradioButton1_function)
self.myradioButton2.toggled.connect(self.myradioButton1_function)
self.myradioButton3.toggled.connect(self.myradioButton1_function)
def myradioButton1_function(self):
if self.myradioButton1.isChecked():
print 'myradioButton1 is Checked'
if self.myradioButton2.isChecked():
print 'myradioButton2 is Checked'
if self.myradioButton3.isChecked():
print 'myradioButton3 is Checked'
def main():
app = QtGui.QApplication(sys.argv)
form = ExampleApp()
form.show()
app.exec_()
if __name__ == '__main__':
main()
Я заметил, что если radioButton1 проверяется, кажется, работает хорошо, но если radiobutton2 или radiobutton3 проверяются, сообщение проверки печатается дважды.
С другой стороны, если подключить каждый сигнал к другой функции, например:
class ExampleApp(QtGui.QMainWindow, design.Ui_MainWindow):
def __init__(self, parent=None):
super(ExampleApp, self).__init__(parent)
self.setupUi(self)
self.myradioButton1.toggled.connect(self.myradioButton1_function)
self.myradioButton2.toggled.connect(self.myradioButton2_function)
self.myradioButton3.toggled.connect(self.myradioButton3_function)
def myradioButton1_function(self):
if self.myradioButton1.isChecked():
print 'myradioButton1 is Checked'
def myradioButton2_function(self):
if self.myradioButton2.isChecked():
print 'myradioButton2 is Checked'
def myradioButton3_function(self):
if self.myradioButton3.isChecked():
print 'myradioButton3 is Checked'
затем он работает, как ожидалось.
Итак, я думаю, что проблема возникает, когда я хочу подключить много сигналов к одной функции. Может ли кто-нибудь объяснить это поведение?
Любые мысли будут оценены.
Он отлично работает. Спасибо. – user3060854