Qt Designer

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ihPyP
User
Beiträge: 58
Registriert: Samstag 4. September 2010, 23:06

Hallo,

ich mache gerade meine ersten Schritte mit Qt und habe mir im Internet einige Videos angeschaut. Ich habe ein paar generelle Fragen:

1. Meine grafische Oberfläche soll in der Lage sein Daten (Koordinaten) aus einer Liste zu plotten. Dies können entweder 2D- oder 3D-Plots sein. Ich habe so etwas früher mit matplotlib in Python gemacht.
Gibt es ein Pendant für Qt-Oberflächen, welches im Qt Designer in der Objektliste auswählen kann?
2. Oder sollte ich erst meine Oberfläche im Qt Designer gestalten, diese ui-Datei anschließend in eine py-Datei zu konvertieren und dann nachträglich (händisch) ein matplotlib-Objekt einbinden?

Danke für das Feedback
BlackJack

@ihPyP: 3.: Wie zweitens, aber ohne die ``*.ui``-Datei in Python-Quelltext umzuwandeln. Man kann die ``*.ui``-Datei zur Laufzeit im Programm laden, ohne den Umweg über generierten Quelltext zu gehen.

Von Matplotlib kann man in Qt-Anwendungen einbetten. Die Matplotlib-Dokumentation hat Beispiele für so etwas.
ihPyP
User
Beiträge: 58
Registriert: Samstag 4. September 2010, 23:06

Ok, danke - ich habe es gerade entdeckt.

Erlaube mir bitte noch zwei kurze Fragen:
1. Welches Objekt würdest Du empfehlen, um die Listen meiner Koordinaten zu verwalten? Ich benötige 2 - 6 Spalten für diverse Koordinaten und möchte den Benutzer gerne leicht Zeilen ändern/hinzufügen/löschen lassen.
2. Ich habe auch noch ein Objekt "CurveWidget" und QwtPlot gefunden? Kann man hiermit nur 2D Kurven plotten, oder auch 3D? Wie schaut es mit Konturverläufen aus?

Danke
ihPyP
User
Beiträge: 58
Registriert: Samstag 4. September 2010, 23:06

Wie lädt man denn eine ui-Datei in Python zur Laufzeit? Und woher kennt man den Syntax der Methoden, welche ich benötige, um die grafischen Elemente mit meinem restlichen Code anzusprechen?
BlackJack

@ihPyP: PyQt hat dafür das `uic`-Modul mit der `loadUi()`-Funktion, die eine *.ui-Datei laden kann und entweder ein entsprechendes Widget-Objekt liefert, oder man übergibt eines als Argument was dann mit den GUI-Elementen aus der `*.ui`-Datei ”bestückt” wird. Als Namen werden die Namen verwendet die man im Designer für die GUI-Elemente vergeben hat. Darüber kann man dann auch Signale aus der GUI mit Slots verbinden oder im Code auf GUI-Elemente zugreifen. Also mal angenommen man hat ein Fenster erstellt mit einem Texteingabefeld, einem Label, und einer Schaltfläche und denen im Designer die Namen `input_edit`, `output_label`, und `calculate_button` gegeben, könnte man Code schreiben der auf Druck auf die Schaltfläche die Eingabe nimmt, als Zahl interpretiert und den verdoppelten Wert in das Label schreibt (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import sys
from PyQt4.QtGui import QApplication
from PyQt4.uic import loadUi


def main():
    def calculate():
        window.output_label.setText(
            unicode(float(window.input_edit.text()) * 2)
        )

    application = QApplication(sys.argv)
    window = loadUi('test.ui')
    window.calculate_button.clicked.connect(calculate)
    window.show()
    sys.exit(application.exec_())


if __name__ == '__main__':
    main()
Antworten