| 1   2   | Next
maemo.org - Talk

maemo.org - Talk (https://talk.maemo.org/index.php)
-   Development (https://talk.maemo.org/forumdisplay.php?f=13)
-   -   QtGui.QListWidget Question (https://talk.maemo.org/showthread.php?t=46001)

noobmonkey 2010-02-26 23:36

QtGui.QListWidget Question
 
Hi alls,

Is there any reason why i can't add to a QtGui.QListWidget from another function.

at the moment in my application i set up some tabs, lots of text fields, and then run functions to collect information, in these functions they all update labels.

I'm really wanting to replace these labels... (Have spent hours on trying to learn tables, trees blah blah, and just trying to stick to something simple.... - cant even get this working!)


If i add to it straight after setting it up ie.
Code:

self.listWidget = QtGui.QListWidget(self.tab)
        self.listWidget.setGeometry(QtCore.QRect(10, 210, 600, 200))
        for i in range(10):
            item = QtGui.QListWidgetItem("Item %i" % i)
            self.listWidget.addItem(item)

It works fine!

But if i try
Code:

  self.listWidget = QtGui.QListWidget(self.tab)
          self.listWidget.setGeometry(QtCore.QRect(10, 210, 600, 200))
          for i in range(10):
              item = QtGui.QListWidgetItem("Item %i" % i)
              self.listWidget.addItem(item)

def  blah.....

Do something
self.listWidget.addItem(item)

It does not work... (If i do a line self.lbl_label.setText(variable) - it does work though)....

Why am i finding a list box so hard?! - over 4 hours now, and not a simple answer?

hartti 2010-02-27 02:58

Re: QtGui.QListWidget Question
 
What's the item you are trying to add in the second function? It is not clear from the code...
(and I am guessing the incorrect indentation in the last line of your code is just a typo, right?)

Hartti

noobmonkey 2010-02-27 09:26

Re: QtGui.QListWidget Question
 
Quote:

Originally Posted by hartti (Post 548465)
What's the item you are trying to add in the second function? It is not clear from the code...
(and I am guessing the incorrect indentation in the last line of your code is just a typo, right?)

Hartti


Hehe, yeah the indendation is fine :) - ignore that bit - was tired and frustrated last night...


Tried adding strings and the following
Code:

for i in range(10):
            item = QtGui.QListWidgetItem("Item %i" % i)
            self.listWidget.addItem(item)

Both types work fine if i do it when i set the widget, but neither work elsewhere in my code... wouldn't mind, but knowing that text labels update fine is what is annoying me!

noobmonkey 2010-02-27 15:49

Re: QtGui.QListWidget Question
 
*bump* *bump*

mikec 2010-02-27 18:35

Re: QtGui.QListWidget Question
 
@noobmonkey

I'm playing around with lists myself (finger scrolling) :D

This works (indents aside). Not sure what you want to do thats different

Code:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'rotate.ui'
#
# Created: Sat Feb 27 18:57:54 2010
#      by: PyQt4 UI code generator 4.6.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtGui.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(50, 50, 271, 381))
        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtGui.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.widget = QtGui.QWidget(self.frame)
        self.widget.setGeometry(QtCore.QRect(10, 10, 258, 351))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtGui.QVBoxLayout(self.widget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtGui.QLabel(self.widget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.listWidget = QtGui.QListWidget(self.widget)
        self.listWidget.setObjectName("listWidget")
        self.verticalLayout.addWidget(self.listWidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("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.label.setText(QtGui.QApplication.translate("MainWindow", "Hello World", None, QtGui.QApplication.UnicodeUTF8))
        for i in range(100):
            item='item '+str(i) 
            self.listWidget.addItem(item)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
   
    MainWindow.show()
    sys.exit(app.exec_())


noobmonkey 2010-02-28 21:14

Re: QtGui.QListWidget Question
 
Cutting bits of your code, and adding some, here is my equivalent - ignoring tab stops - nightmare to do it right in this window!

Code:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtGui.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(50, 50, 271, 381))
        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtGui.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.widget = QtGui.QWidget(self.frame)
        self.widget.setGeometry(QtCore.QRect(10, 10, 258, 351))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtGui.QVBoxLayout(self.widget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtGui.QLabel(self.widget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.listWidget = QtGui.QListWidget(self.widget)
        self.listWidget.setObjectName("listWidget")
        self.verticalLayout.addWidget(self.listWidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
       
      <<define Push button>>
      <<Push button, on click, runs myfunction()>>

      <<define Push button2>>
      <<Push button, on click, runs myfunction2()>>

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

  def retranslateUi(self, MainWindow):

          MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("MainWindow", "Hello World", None, QtGui.QApplication.UnicodeUTF8))
 

    def myfunction(self):
        <<Random code, get variables>>
        self.listWidget.addItem(variable)

    def myfunction2(self):
        <<Random code, get variables>>
        self.listWidget.addItem(variable2)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
   
    MainWindow.show()
    sys.exit(app.exec_())


mikec 2010-03-01 11:27

Re: QtGui.QListWidget Question
 
Not sure if your code above works

but here is modified version as per you example that works on my system
PR 1.1.1 and PyQt 4.7

Mike C


Code:

from PyQt4 import QtCore, QtGui
import ctypes
libc = ctypes.CDLL('libc.so.6')
libc.printf('Hello world!')


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(727, 576)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtGui.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(40, 40, 571, 441))
        self.frame.setStyleSheet("background-color: rgb(77, 255, 80);")
        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtGui.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.listWidget = QtGui.QListWidget(self.frame)
        self.listWidget.setGeometry(QtCore.QRect(11, 31, 541, 361))
        self.listWidget.setMinimumSize(QtCore.QSize(500, 0))
        self.listWidget.setObjectName("listWidget")
        self.label = QtGui.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(11, 11, 541, 16))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 727, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
       
        self.myfunction()

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
       
       
       

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("MainWindow", "================Hello World======================", None, QtGui.QApplication.UnicodeUTF8))


    def myfunction(self):
        for i in range(100):
            item='item '+str(i) 
            self.listWidget.addItem(item)



if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
   
    libc = ctypes.CDLL('libc.so.6')
    libc.printf('Hello world!')
   
   
   
    MainWindow.show()
    sys.exit(app.exec_())


noobmonkey 2010-03-01 13:14

Re: QtGui.QListWidget Question
 
ahhhh cheers.... the only thing i am doing different is threading mt functions... will try taking the threads out tonight and see if that helps.

noobmonkey 2010-03-01 21:49

Re: QtGui.QListWidget Question
 
Mike - i love you!!!!

It was a mistake in my code.... missing one character - but was so confused with so many lines i missed it!

Anyway going over and over yours i finally spotted it :D - so that you very much!
(Healthcheck now has touch selectors) - just being used to list, but will detect a click on them soon :D

mikec 2010-03-01 23:13

Re: QtGui.QListWidget Question
 
easily done

I'm trying to get my little app into extras dev, and it keeps crashing once installed via app manager, but works fine when I run from /opt.

build 5 now, and its driving me crazy........


| 1   2   | Next
All times are GMT. The time now is 19:32.

vBulletin® Version 3.8.8