Seite 1 von 1

Variablen in module schicken

Verfasst: Mittwoch 6. Februar 2008, 19:31
von Andyh
Hallo

Ich hoffe ich störe mit diesen einfachen Fragen nicht.

Also ich habe mit dem Qt Desiger eine Oberfläche erstellt und lade diese so:

Code: Alles auswählen

import sys
from PyQt4 import QtGui
from anzeige import Ui_Dialog as Dlg

global Xpos
global Ypos
global Zpos

Xpos = 0
Ypos = 0
Zpos = 0

class MeinDialog(QtGui.QDialog, Dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        
        #Slots Einrichten
        self.connect(self.X0, QtCore.SIGNAL("clicked()"), self.X0)
        self.connect(self.Y0, QtCore.SIGNAL("clicked()"), self.Y0)
        self.connect(self.Z0, QtCore.SIGNAL("clicked()"), self.Z0)
        
app = QtGui.QApplication(sys.argv)
dialog = MeinDialog()
dialog.show()
sys.exit(app.exec_()) 
In der GUI habe ich drei Labels die die Variablen Xpos, Ypos und Zpos Anzeigen sollen. Nur es kommt der fehler:

NameError: global name 'Xpos' is not defined

Was muss ich machen damit ich die Variablen dort hinbekomme?

Gruß
Andyh der endlich ein Python Buch hat

Verfasst: Mittwoch 6. Februar 2008, 20:16
von BlackJack
Ich würde sagen gar nichts, Du solltest sie nicht "dort hin" bekommen wollen. ``global`` auf Modulebene hat keinen Effekt, die Zeilen kannst Du Dir sparen.

Das sollten Attribute des Dialogs sein. Muss der Dialog von `QtGui.QDialog` erben? Ich hätte erwartet, das `Dlg` das schon tut!? Dessen `__init__()` Du übrigens nicht aufrufst.

Verfasst: Mittwoch 6. Februar 2008, 20:37
von Andyh
Hallo

Also wenn ich sie dort nicht hinbekommen will, was ich aber will, wie mache ich es dann. Ich denke die Lösung ist das:
Das sollten Attribute des Dialogs sein. Muss der Dialog von `QtGui.QDialog` erben? Ich hätte erwartet, das `Dlg` das schon tut!? Dessen `__init__()` Du übrigens nicht aufrufst.
Nur ihrgendwie komme ich da nicht mit.

Gruß
Andyh

Verfasst: Mittwoch 6. Februar 2008, 22:06
von BlackJack
Die Labels müsstest Du in der `MeinDialog`-Klasse mit den entsprechenden Werten versorgen. Wo bekommst Du eigentlich den `NameError`? Hast Du etwa Quelltext in das generierte Modul geschrieben?

Re: Variablen in module schicken

Verfasst: Mittwoch 6. Februar 2008, 23:16
von Gnushi
Vorschlag:
Du definierst die Variablen Xpos, Ypos und Zpos innerhalb der Klasse.
Anschließend setzt du mit z. B.

Code: Alles auswählen

labelZ.setNum(Zpos)
die Werte im Label. Das machst du am besten im Konstruktor oder dort, wo sie sich ändern. Dann kannst du dir die Änderung am Ui-File sparen.
Siehe:
http://www.riverbankcomputing.com/Docs/ ... l#setNum-2
Hoffe das hilft.

GnuShi

Verfasst: Donnerstag 7. Februar 2008, 18:25
von Andyh
Hallo

Jetzt habe ich es verstanden und es geht tadellos.

Danke

Gruß
Andyh