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

Reply via email to