Hello,
My first post here, and also my first python app.
I'm having trouble getting my Qt3 app wotking in Qt4. I have designed
the UI in QT-Designer and ported it to Qt4 with uic3 -convert, and
removed all Qt3 support widgets. When I run the .py it complains:
Traceback (most recent call last):
File "testapp.py", line 100, in ?
app = HelloApplication(sys.argv)
File "testapp.py", line 20, in __init__
self.maindialog = TestAppUI(None)
File "testapp.py", line 31, in __init__
self._connectSlots()
File "testapp.py", line 42, in _connectSlots
self.connect(self.addbutton,SIGNAL("clicked()"),self._slotAddClicked)
AttributeError: 'TestAppUI' object has no attribute 'connect'
Is this a change in QT, or one of my mistakes?
The .ui and .py Files are attached.
Thanks, Lawrence
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'testapp4.ui'
#
# Created: Tue Apr 3 10:10:35 2007
# by: PyQt4 UI code generator 4.1.1
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt4 import QtCore, QtGui
class Ui_TestAppUI(object):
def setupUi(self, TestAppUI):
TestAppUI.setObjectName("TestAppUI")
TestAppUI.resize(QtCore.QSize(QtCore.QRect(0,0,800,600).size()).expandedTo(TestAppUI.minimumSizeHint()))
self.centralwidget = QtGui.QWidget(TestAppUI)
self.centralwidget.setObjectName("centralwidget")
self.gridlayout = QtGui.QGridLayout(self.centralwidget)
self.gridlayout.setMargin(9)
self.gridlayout.setSpacing(6)
self.gridlayout.setObjectName("gridlayout")
self.vboxlayout = QtGui.QVBoxLayout()
self.vboxlayout.setMargin(0)
self.vboxlayout.setSpacing(6)
self.vboxlayout.setObjectName("vboxlayout")
self.splitter = QtGui.QSplitter(self.centralwidget)
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.layoutWidget_2 = QtGui.QWidget(self.splitter)
self.layoutWidget_2.setObjectName("layoutWidget_2")
self.vboxlayout1 = QtGui.QVBoxLayout(self.layoutWidget_2)
self.vboxlayout1.setMargin(0)
self.vboxlayout1.setSpacing(6)
self.vboxlayout1.setObjectName("vboxlayout1")
self.lineedit = QtGui.QLineEdit(self.layoutWidget_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Policy(1),QtGui.QSizePolicy.Policy(0))
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineedit.sizePolicy().hasHeightForWidth())
self.lineedit.setSizePolicy(sizePolicy)
self.lineedit.setObjectName("lineedit")
self.vboxlayout1.addWidget(self.lineedit)
self.hboxlayout = QtGui.QHBoxLayout()
self.hboxlayout.setMargin(0)
self.hboxlayout.setSpacing(6)
self.hboxlayout.setObjectName("hboxlayout")
self.addbutton = QtGui.QPushButton(self.layoutWidget_2)
self.addbutton.setObjectName("addbutton")
self.hboxlayout.addWidget(self.addbutton)
self.deletebutton = QtGui.QPushButton(self.layoutWidget_2)
self.deletebutton.setObjectName("deletebutton")
self.hboxlayout.addWidget(self.deletebutton)
self.vboxlayout1.addLayout(self.hboxlayout)
self.listView = QtGui.QListView(self.layoutWidget_2)
self.listView.setObjectName("listView")
self.vboxlayout1.addWidget(self.listView)
self.hboxlayout1 = QtGui.QHBoxLayout()
self.hboxlayout1.setMargin(0)
self.hboxlayout1.setSpacing(6)
self.hboxlayout1.setObjectName("hboxlayout1")
self.UpButton = QtGui.QPushButton(self.layoutWidget_2)
self.UpButton.setObjectName("UpButton")
self.hboxlayout1.addWidget(self.UpButton)
self.DownButton = QtGui.QPushButton(self.layoutWidget_2)
self.DownButton.setObjectName("DownButton")
self.hboxlayout1.addWidget(self.DownButton)
self.vboxlayout1.addLayout(self.hboxlayout1)
self.textBrowser = QtGui.QTextBrowser(self.splitter)
self.textBrowser.setObjectName("textBrowser")
self.vboxlayout.addWidget(self.splitter)
self.progressBar = QtGui.QProgressBar(self.centralwidget)
self.progressBar.setProperty("value",QtCore.QVariant(24))
self.progressBar.setOrientation(QtCore.Qt.Horizontal)
self.progressBar.setObjectName("progressBar")
self.vboxlayout.addWidget(self.progressBar)
self.gridlayout.addLayout(self.vboxlayout,0,0,1,1)
TestAppUI.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(TestAppUI)
self.menubar.setGeometry(QtCore.QRect(0,0,800,29))
self.menubar.setObjectName("menubar")
self.menuFile = QtGui.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
self.menuFilters = QtGui.QMenu(self.menubar)
self.menuFilters.setObjectName("menuFilters")
self.menuHelp = QtGui.QMenu(self.menubar)
self.menuHelp.setObjectName("menuHelp")
self.menuEdit = QtGui.QMenu(self.menubar)
self.menuEdit.setObjectName("menuEdit")
TestAppUI.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(TestAppUI)
self.statusbar.setObjectName("statusbar")
TestAppUI.setStatusBar(self.statusbar)
self.action_Open_Concordance_File = QtGui.QAction(TestAppUI)
self.action_Open_Concordance_File.setObjectName("action_Open_Concordance_File")
self.actionSave_Filtered_Output = QtGui.QAction(TestAppUI)
self.actionSave_Filtered_Output.setObjectName("actionSave_Filtered_Output")
self.actionQuit = QtGui.QAction(TestAppUI)
self.actionQuit.setObjectName("actionQuit")
self.action_Open_Saved_Filters = QtGui.QAction(TestAppUI)
self.action_Open_Saved_Filters.setObjectName("action_Open_Saved_Filters")
self.action_Export_All_Filters = QtGui.QAction(TestAppUI)
self.action_Export_All_Filters.setObjectName("action_Export_All_Filters")
self.action_New_Filter = QtGui.QAction(TestAppUI)
self.action_New_Filter.setObjectName("action_New_Filter")
self.action_Edit_Filters = QtGui.QAction(TestAppUI)
self.action_Edit_Filters.setObjectName("action_Edit_Filters")
self.actionDelete_Filter = QtGui.QAction(TestAppUI)
self.actionDelete_Filter.setObjectName("actionDelete_Filter")
self.actionHelp_Index = QtGui.QAction(TestAppUI)
self.actionHelp_Index.setObjectName("actionHelp_Index")
self.actionAbout = QtGui.QAction(TestAppUI)
self.actionAbout.setObjectName("actionAbout")
self.menuFile.addAction(self.action_Open_Concordance_File)
self.menuFile.addAction(self.actionSave_Filtered_Output)
self.menuFile.addAction(self.actionQuit)
self.menuFilters.addAction(self.action_Open_Saved_Filters)
self.menuFilters.addAction(self.action_Export_All_Filters)
self.menuFilters.addSeparator()
self.menuFilters.addAction(self.action_New_Filter)
self.menuFilters.addAction(self.actionDelete_Filter)
self.menuFilters.addAction(self.action_Edit_Filters)
self.menuHelp.addAction(self.actionHelp_Index)
self.menuHelp.addAction(self.actionAbout)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuEdit.menuAction())
self.menubar.addAction(self.menuFilters.menuAction())
self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(TestAppUI)
QtCore.QMetaObject.connectSlotsByName(TestAppUI)
def retranslateUi(self, TestAppUI):
TestAppUI.setWindowTitle(QtGui.QApplication.translate("TestAppUI", "Interlinear Aramaic Concordance", None, QtGui.QApplication.UnicodeUTF8))
self.lineedit.setToolTip(QtGui.QApplication.translate("TestAppUI", "New Filter Name", None, QtGui.QApplication.UnicodeUTF8))
self.addbutton.setText(QtGui.QApplication.translate("TestAppUI", "&Add Filter", None, QtGui.QApplication.UnicodeUTF8))
self.addbutton.setShortcut(QtGui.QApplication.translate("TestAppUI", "Alt+A", None, QtGui.QApplication.UnicodeUTF8))
self.deletebutton.setText(QtGui.QApplication.translate("TestAppUI", "&Delete", None, QtGui.QApplication.UnicodeUTF8))
self.deletebutton.setShortcut(QtGui.QApplication.translate("TestAppUI", "Alt+D", None, QtGui.QApplication.UnicodeUTF8))
self.UpButton.setToolTip(QtGui.QApplication.translate("TestAppUI", "Move filter up", None, QtGui.QApplication.UnicodeUTF8))
self.UpButton.setText(QtGui.QApplication.translate("TestAppUI", "&Up", None, QtGui.QApplication.UnicodeUTF8))
self.UpButton.setShortcut(QtGui.QApplication.translate("TestAppUI", "Alt+U", None, QtGui.QApplication.UnicodeUTF8))
self.DownButton.setToolTip(QtGui.QApplication.translate("TestAppUI", "Move filter down", None, QtGui.QApplication.UnicodeUTF8))
self.DownButton.setText(QtGui.QApplication.translate("TestAppUI", "Dow&n", None, QtGui.QApplication.UnicodeUTF8))
self.DownButton.setShortcut(QtGui.QApplication.translate("TestAppUI", "Alt+N", None, QtGui.QApplication.UnicodeUTF8))
self.menuFile.setTitle(QtGui.QApplication.translate("TestAppUI", "File", None, QtGui.QApplication.UnicodeUTF8))
self.menuFilters.setTitle(QtGui.QApplication.translate("TestAppUI", "Filters", None, QtGui.QApplication.UnicodeUTF8))
self.menuHelp.setTitle(QtGui.QApplication.translate("TestAppUI", "Help", None, QtGui.QApplication.UnicodeUTF8))
self.menuEdit.setTitle(QtGui.QApplication.translate("TestAppUI", "Edit", None, QtGui.QApplication.UnicodeUTF8))
self.action_Open_Concordance_File.setText(QtGui.QApplication.translate("TestAppUI", "&Open Concordance File", None, QtGui.QApplication.UnicodeUTF8))
self.actionSave_Filtered_Output.setText(QtGui.QApplication.translate("TestAppUI", "Save Filtered Output", None, QtGui.QApplication.UnicodeUTF8))
self.actionQuit.setText(QtGui.QApplication.translate("TestAppUI", "Quit", None, QtGui.QApplication.UnicodeUTF8))
self.action_Open_Saved_Filters.setText(QtGui.QApplication.translate("TestAppUI", "&Import Filters", None, QtGui.QApplication.UnicodeUTF8))
self.action_Export_All_Filters.setText(QtGui.QApplication.translate("TestAppUI", "E&xport All Filters", None, QtGui.QApplication.UnicodeUTF8))
self.action_New_Filter.setText(QtGui.QApplication.translate("TestAppUI", "&New Filter", None, QtGui.QApplication.UnicodeUTF8))
self.action_Edit_Filters.setText(QtGui.QApplication.translate("TestAppUI", "&Edit Filters", None, QtGui.QApplication.UnicodeUTF8))
self.actionDelete_Filter.setText(QtGui.QApplication.translate("TestAppUI", "Delete Filter", None, QtGui.QApplication.UnicodeUTF8))
self.actionHelp_Index.setText(QtGui.QApplication.translate("TestAppUI", "Help Index", None, QtGui.QApplication.UnicodeUTF8))
self.actionAbout.setText(QtGui.QApplication.translate("TestAppUI", "About", None, QtGui.QApplication.UnicodeUTF8))
#!/usr/bin/env python
from iac_ui import Ui_TestAppUI
##from PyQt4 import *
from PyQt4.QtGui import *
import sys
class HelloApplication(QApplication):
def __init__(self, args):
""" In the constructor we're doing everything to get our application
started, which is basically constructing a basic QApplication by
its __init__ method, then adding our widgets and finally starting
the exec_loop."""
QApplication.__init__(self,args)
# We pass None since it's the top-level widget, we could in fact leave
# that one out, but this way it's easier to add more dialogs or widgets.
self.maindialog = TestAppUI(None)
self.setMainWidget(self.maindialog)
self.maindialog.show()
self.exec_loop()
class TestAppUI(Ui_TestAppUI):
def __init__(self,parent):
# Run the parent constructor and connect the slots to methods.
Ui_TestAppUI.__init__(self,parent)
self._connectSlots()
# The listview is initially empty, so the deletebutton will have no effect,
# we grey it out.
self.deletebutton.setEnabled(False)
self.UpButton.setEnabled(False)
self.DownButton.setEnabled(False)
def _connectSlots(self):
# Connect our two methods to SIGNALS the GUI emits.
self.connect(self.addbutton,SIGNAL("clicked()"),self._slotAddClicked)
self.connect(self.deletebutton,SIGNAL("clicked()"),self._slotDeleteClicked)
self.connect(self.UpButton,SIGNAL("clicked()"),self._slotUpClicked)
self.connect(self.DownButton,SIGNAL("clicked()"),self._slotDownClicked)
def _slotAddClicked(self):
# Read the text from the lineedit,
text = self.lineedit.text()
# if the lineedit is not empty,
if len(text):
lvi = QListViewItem(self.listview)
lvi.setText(0,text)
# insert a new listviewitem with the text from the lineedit and
#self.listview.insertItem(text)
# clear it.
self.lineedit.clear()
# The deletebutton might be disabled, since we're sure that there's now
# at least one item in it, we enable it.
self.deletebutton.setEnabled(True)
# Check if the list has less than 2 items - if yes, disable the up/down buttons.
if self.listview.childCount() < 2:
self.UpButton.setEnabled(False)
self.DownButton.setEnabled(False)
else:
self.UpButton.setEnabled(True)
self.DownButton.setEnabled(True)
def _slotUpClicked(self):
print "slotUpClicked"
self.listview.setSorting(False) # disable sorting
self.listview.currentItem().moveItem(self.listview.currentItem().itemAbove())
def _slotDownClicked(self):
print "slotUpClicked"
self.listview.setSorting(False) # disable sorting
self.listview.currentItem().moveItem(self.listview.currentItem().itemBelow())
def _slotDeleteClicked(self):
# Remove the currently selected item from the listview.
self.listview.takeItem(self.listview.currentItem())
# Check if the list is empty - if yes, disable the deletebutton.
if self.listview.childCount() == 0:
self.deletebutton.setEnabled(False)
# Check if the list has less than 2 items - if yes, disable the up/down buttons.
if self.listview.childCount() < 2:
self.UpButton.setEnabled(False)
self.DownButton.setEnabled(False)
else:
self.UpButton.setEnabled(True)
self.DownButton.setEnabled(True)
if __name__ == "__main__":
app = HelloApplication(sys.argv)
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt