[Python-de] PyQt4: WindowTitle ändern / Label-Text init. ... aber wie?

Andreas Pakulat apaku at gmx.de
Mi Nov 7 00:30:02 UTC 2007


On 05.11.07 21:29:11, Daniel Hagemeister-Biernath wrote:
> 1.) in einem Dialog zum Programmstart den Text eines Labels ändern will, 
> klappt das nicht so, wie gedacht. Es geht nur, wenn ich das innerhalb der 
> setupUi mache. 

Doch, es klappt auch anders:

class MyDialog(QtGui.QDialog):
	def __init__(self, parent):
		self.ui = Ui_Dialog()
		self.ui.setupUi(self)
		self.ui.textLabel.setText("InitialContent")
	
	def changeText(self, newtext)
		self.ui.textLabel.setText(newtext)

Dann irgendwo anders:

dialog = MyDialog()
dialog.changeText("FOO")

setupUi willst du nicht aendern, das ist generierter Code und deine
Aenderungen werden ueberschrieben sobald du das .ui file aenderst.

> 2.) ich den WindowTitle z. B. als Reaktion auf einen Klick auf einen Button 
> ändern möchte, wird der Titel nicht geändert. 

Du meinst self.setWindowTitle("Foo") funktioniert nicht, wenn self eine
Instanz von QWidget oder abgeleiteter Klasse ist? Das waere sehr
merkwuerdig. 

> Bei PyQt3 klappte das alles immer... ich schätze, es hat sich was am Konzept 
> mit der Version 4 geändert. Nun suche ich schon wochenlang in der Doku und 
> google fleissig rum, werde aber nicht fündig. Kann jemand helfen? 

Ja da hat sich einiges geaendert. Allerdings ist die
Designer-Dokumentation von TT recht ausfuehrlich, man muss nur die
relevanten Teile von C++ auf Python uebersetzen. Das sollte nicht sooo
schwer sein, wenn man die Syntax von C++ ein klein wenig kennt. Auch die
PyQt4 Doku hat IIRC ein paar Hinweise.

Im wesentlichen leitest du jetzt nicht mehr von deinem designten
Formular ab, sondern direkt von QWidget oder der jeweiligen Subklasse.
Das was du mit designer in ein .ui gespeichert hast und mit pyuic in
Python code ueberfuehrt wendest du dann auf deine Instanz eines widgets
an und setupUi erzeugt die ganzen Objekte und setzt sie ins Layout. Wenn
du also das ui-Objekt "behaelst" kannst du sehr einfach auf die ganzen
GUI-Elemente zugreifen.

Ich kommentiere den Code nicht weiter, weil das hinten und vorne nicht
passt.

Andreas

-- 
You'll never be the man your mother was!