Seite 1 von 1

Qt Designer

Verfasst: Dienstag 28. Juli 2015, 14:22
von ihPyP
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

Re: Qt Designer

Verfasst: Dienstag 28. Juli 2015, 14:27
von 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.

Re: Qt Designer

Verfasst: Dienstag 28. Juli 2015, 15:02
von ihPyP
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

Re: Qt Designer

Verfasst: Montag 3. August 2015, 07:52
von ihPyP
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?

Re: Qt Designer

Verfasst: Montag 3. August 2015, 09:14
von 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()