Reputation: 29
This code simply prints out the current item in combobox.
I can put an event on combobox via the MyWindow class and it works great
I can't put an event on combobox via UiMainWindowsEvents class why??????
I just want my code to be more object oriented and if my gui is huge don't want everything to get cluttered in one class.
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class UiMainWindow():
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.verticalLayoutWidget = QtGui.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(110, 80, 101, 151))
self.verticalLayoutWidget.setObjectName(_fromUtf8("verticalLayoutWidget"))
self.verticalLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setMargin(0)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.comboBox = QtGui.QComboBox(self.verticalLayoutWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.comboBox.sizePolicy().hasHeightForWidth())
self.comboBox.setSizePolicy(sizePolicy)
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.verticalLayout.addWidget(self.comboBox)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
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(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "item1", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "item2", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "item3", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(3, QtGui.QApplication.translate("MainWindow", "item4", None, QtGui.QApplication.UnicodeUTF8))
class MyWindow():
def __init__(self):
self.ui_mainwindow = UiMainWindow()
qwindowobj = QtGui.QMainWindow()
self.ui_mainwindow.setupUi(qwindowobj)
qwindowobj.show()
UiMainWindowEvents(self.ui_mainwindow) #this doens't work
# self.ui_mainwindow.comboBox.activated['QString'].connect(self.comboboxSelect) #this works
def comboboxSelect(self, name):
print(name)
class UiMainWindowEvents():
def __init__(self, uimainwindow_obj):
self.uimainwindow_obj = uimainwindow_obj
self.uimainwindow_obj.comboBox.activated['QString'].connect(self.comboboxSelect)
def comboboxSelect(self, name):
print(name)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = MyWindow()
sys.exit(app.exec_())
Upvotes: 0
Views: 33
Reputation: 5207
I think you need to store the UiMainWindowEvents
object so it isn't garbage collected.
self.uiMainWindowEvents = UiMainWindowEvents(self.ui_mainwindow)
Upvotes: 1