ich versuche mich gerade in PyQt einzuarbeiten. Dabei bin ich auf folgendes Problem gestoßen: Ich möchte ein QListView benutzen, um komfortabel aus einer Liste (später evtl. auch Baum) einen Eintrag zu selektieren. In den einzelnen QListViewItems sollen deshalb Zusatzinformationen gespeichert werden, die dann später in editierbaren Feldern neben dem ListView angezeigt werden sollen. Dies ist an sich noch kein Problem und funzt so weit.
Nun soll man ja aber auch diese Daten editieren können. Wenn ich nun (wie in meinem kleinen Demo-Beispiel) über das Signal textChanged() eines QLineEdits den aktuellen Text in mein überschriebenes ListViewItem schreiben will, stürzt das Proggi ab! Warum?
Lustigerweise ja aber auch erst nach dem Schreibvorgang ...
Hier das Programm
Code: Alles auswählen
#! /usr/bin/python
import sys
from qt import *
from Test import Test
#
# MyListViewItem
#
class MyItem(QListViewItem):
def __init__(self, parent,name):
QListViewItem.__init__(self, parent,name)
self.name=name
#
# Hauptfenster
#
class MainWindow(Test):
def __init__(self,*args):
apply(Test.__init__, (self,) + args)
self.liste.insertItem(MyItem(self.liste,"Test1"))
self.liste.insertItem(MyItem(self.liste,"Test2"))
self.liste.insertItem(MyItem(self.liste,"Test3"))
self.liste.insertItem(MyItem(self.liste,"Test4"))
QObject.connect(self.text,SIGNAL("textChanged(const QString &)"),self.slotName)
QObject.connect(self.liste,SIGNAL("currentChanged(QListViewItem *)"),self.slotShow)
def slotShow(self,item):
self.text.setText(item.name)
def slotName(self,name):
print "Vor dem Schreiben"
self.liste.currentItem().name=name
print "Nach dem Schreiben"
#
# Hauptprogramm
#
def main(args):
app=QApplication(args)
win=MainWindow()
win.show()
app.connect(app, SIGNAL("lastWindowClosed()"),app, SLOT("quit()"))
app.exec_loop()
if __name__=="__main__":
main(sys.argv)
Code: Alles auswählen
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test1.ui'
#
# Created: Fr Sep 3 11:56:28 2004
# by: The PyQt User Interface Compiler (pyuic) 3.11
#
# WARNING! All changes made in this file will be lost!
from qt import *
class Test(QDialog):
def __init__(self,parent = None,name = None,modal = 0,fl = 0):
QDialog.__init__(self,parent,name,modal,fl)
if not name:
self.setName("Test")
TestLayout = QVBoxLayout(self,11,6,"TestLayout")
self.liste = QListView(self,"liste")
self.liste.addColumn(self.__tr("Column 1"))
TestLayout.addWidget(self.liste)
self.text = QLineEdit(self,"text")
TestLayout.addWidget(self.text)
self.languageChange()
self.resize(QSize(228,285).expandedTo(self.minimumSizeHint()))
self.clearWState(Qt.WState_Polished)
def languageChange(self):
self.setCaption(self.__tr("Form1"))
self.liste.header().setLabel(0,self.__tr("Column 1"))
def __tr(self,s,c = None):
return qApp.translate("Test",s,c)
Ich benutze Python 2.3.3 auf einer SuSE 9.1 Maschine.
Ich hoffe jemand weiß Rat und kann mir das Problem erklären / lösen!