Seite 1 von 1
Quellcode aus PyQt Designer
Verfasst: Donnerstag 2. Dezember 2010, 16:06
von Friedericus
Hiho,
ne blöde frage: wie kann ich unter Windows, wenn ich im Designer eine Oberfläche gebaut habe. Diese in Quellcode umsetzen, sodass mir die Signal-Slot Sachen erhalten bleiben?
Wenn ich das per Kommandozeile und uic mache, bekomme ich nur die Anordnung der Elemente zurück:
Code: Alles auswählen
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test.ui'
#
# Created: Thu Dec 02 15:14:57 2010
# by: PyQt4 UI code generator 4.3.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(QtCore.QSize(QtCore.QRect(0,0,399,306).size()).expandedTo(MainWindow.minimumSizeHint()))
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lcdNumber = QtGui.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(130,90,201,101))
self.lcdNumber.setObjectName("lcdNumber")
self.horizontalSlider = QtGui.QSlider(self.centralwidget)
self.horizontalSlider.setGeometry(QtCore.QRect(150,220,160,21))
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.setObjectName("horizontalSlider")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,0,399,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.QObject.connect(self.horizontalSlider,QtCore.SIGNAL("valueChanged(int)"),self.lcdNumber.display)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
Re: Quellcode aus PyQt Designer
Verfasst: Donnerstag 9. Dezember 2010, 20:12
von EmaNymton
Ich verstehe deine Frage nicht ganz. In der Datei, die du mit uic generierst steht doch
Code: Alles auswählen
QtCore.QObject.connect(self.horizontalSlider,QtCore.SIGNAL("valueChanged(int)"),self.lcdNumber.display)
Welche Connects vermisst du denn?
Re: Quellcode aus PyQt Designer
Verfasst: Donnerstag 9. Dezember 2010, 20:40
von Hyperion
Zudem sei noch mal darauf verwiesen, dass man besser auf das Generieren verzichten sollte und stattdessen mittels des uic-Moduls die GUI-Spezifikationsdatei zur Laufzeit laden und daraus die GUI dynamisch generieren sollte.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 13:29
von solar22
Es würde mich interessieren, wie das geht.
Das such ich schon die ganze Zeit :K
Gruß!
solar22
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 13:40
von burli
Die Funktion heißt loadUI
http://www.riverbankcomputing.co.uk/sta ... uic-module
Code: Alles auswählen
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
QtGui.QWidget.__init__(self, *args)
uic.loadUi("deinegui.ui", self)
So in etwa
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 14:01
von solar22
Mh ja er lädt was, aber wenn ich meine hauptdialog.ui mit dem QtCreator 4 Designer ändere und speichere und mein Programm neu starte werden die Änderungen nicht übernommen
Edit: Hier der Startcode:
Code: Alles auswählen
class MeinDialog(QtGui.QMainWindow):
def __init__(self):
QtGui.QDialog.__init__(self)
loadUi("/var/www/cachebase/UI/hauptdialog.ui", self)
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 14:17
von lunar
"/var/www/cachebase/UI/hauptdialog.ui"?! Was in Gottes Namen treibst Du denn da? Du entwickelst doch nicht etwa in systemweiten Verzeichnissen?
Jedenfalls machst Du irgendetwas falsch, wenn die Änderungen an der Oberfläche nach der Bearbeitung der UI-Datei nicht in der Anwendung angezeigt werden. Was genau, das lässt sich ohne genauere Informationen nicht sagen.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 14:19
von solar22
Ich hab den Pfad erstmal hard gecodet ja (das ich in /var/www/ arbeite liegt daran, das dies immer mein Projektverzeichnis zum Programmieren ist).
Ich weis, wie ich den Pfad später auslese, wollte das nur grad direkt angeben das er nicht eine andere Datei nimmt aus versehen um den Fehler einzukreisen.
Welche Informationen benötigst du denn genau?
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 14:28
von lunar
@solar22: Wie wäre es mit dem Pfad der Datei, die Du im Programm lädst und dem Pfad der Datei, die Du im Designer bearbeitest? Die sind offenbar verschieden.
"/var/www/" als Projektverzeichnis zu verwenden, ist – gelinde gesagt – sehr ungewöhnlich. "/var/www/" ist normalerweise ein Systemverzeichnis, in dem statische Dateien für den Webserver abgelegt sind, und dementsprechend für den Benutzer nicht einmal beschreibbar. Du entwickelst doch hoffentlich nicht als "root"?
Üblicherweise programmiert man in seinem eigenen Heimatverzeichnis (e.g. "/home/solar22/"), genau so wie man alle eigenen Daten, Dateien, usw. in diesem Verzeichnis aufbewahrt.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 14:30
von solar22
Der Pfad der Datei im Designer ist der selbe. Ich haben eben nochmal die Datei überschrieben, keine Änderung.
/var/www/ hab ich in meine Benutzergruppe geholt das Berechtigungen angeht.
Normalerweise entwickel ich mit PHP und Co, daher hab ich mir das angewöhnt dort zu entwickeln, damit ich die Datein in meinem Wirrwarr von /home-Ordner nicht verliere.
Nein, ich entwickel nicht als root

Das wäre ja lebensmüde.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 15:11
von cofi
1. Dein "Dialog" ist ein QMainWindow.
2. Du initialisierst ein QMainWindow mit dem Code fuer einen QDialog.
Wundert mich, dass das noch nicht kracht. Und dann noch:
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#the-uic-module hat geschrieben:loadUi(uifile, baseinstance=None)
This function loads a Qt Designer .ui file and returns an instance of the user interface.
uifile is a file name or file-like object containing the .ui file.
baseinstance is an optional instance of the Qt base class. If specified then the user interface is created in it. Otherwise a new instance of the base class is automatically created.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 15:32
von solar22
Wenn ich das in
Code: Alles auswählen
class MeinDialog(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
loadUi("/var/www/cachebase/UI/hauptdialog.ui", self)
ändert sich aber auch nix ^^
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 15:38
von cofi
Das war ein Schritt in die Falsche Richtung. Vorrausgesetzt in `hauptdialog.ui` steckt ein Dialog-Widget.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 16:25
von solar22
In der hauptdialog.ui steht:
Code: Alles auswählen
ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
Denmnach nehme ich an das es sich um ein QMainWindow handelt, oder ?
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 17:13
von cofi
Ja, dann ist es ein QMainWindow. Das heisst aber auch, dass du dich mal um deine irrefuehrenden Namen kuemmern solltest.
Wir haben jetzt lange genug im Trueben gefischt: Wir brauchen den relevanten Code und die ui Datei.
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 17:32
von solar22
Ich fragte ja schon, was für Infos ihr braucht

Ich denke ja nicht, das ihr 400Zeilen Code haben wollt.
Aber hier erstmal die .ui Datei:
http://nopaste.info/c58249091a_nl.html
Den Klassennamen hab ich mal angepasst

War wirklich ziemlich irreführend, stimmt.
Der Aufruf als solcher ist ganz normal:
Code: Alles auswählen
app = QtGui.QApplication(sys.argv)
dialog = Cachebase()
dialog.tableWidget.resizeColumnsToContents()
dialog.show()
sys.exit(app.exec_())
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 18:11
von cofi
Mit folgendem Code habe ich kein Problem:
Code: Alles auswählen
from PyQt4 import QtGui, QtCore, uic
import sys
class Main(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
uic.loadUi("test.ui", self)
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
Fuers naechste mal bitte bei einer pastebin, die einem das herunterladen der Datei ermoeglicht, z.b paste.pocoo.org
Re: Quellcode aus PyQt Designer
Verfasst: Dienstag 28. Dezember 2010, 18:48
von solar22
Mhh....dein Code funktioniert.
Es scheint wohl nur die Änderung der Zeile
in
gewesen zu sein.
Danke dir

Alles klar, das nächste mal paste.pocoo.org
