Benutzer-Werkzeuge

Webseiten-Werkzeuge


pc:qtdesigner

QtDesigner Tricks

Installieren von PyQt in eine normale Python- Umgebung

In Linux

pip install pyqt6 pyside6 PyQt6Designer

in Windows

pip install pyqt6-tools

in Windows dann starten mit pyqt6-tools designer

Widgets in Layouts verpacken

Wenn man GUI- Oberflächen für Python mit dem QtDesigner macht, ist das ja fast einfach - fast…, denn die einzelnen Widgets jeweils in ihre jeweils übergeordneteten Layouts zu drücken, artet bei mir immer zu einem Akt der Verzweiflung aus, weil ich jedesmal vergessen habe, wie man vorgehen muß. Darum habe ich es mir jetzt mal aufgeschrieben:

  • Am Anfang Finger weg von den Layouts!
  • Stattdessen erst alle Einzelelemente (Widgets) in den gewünschten Containern anordnen und im Fenster verteilen
  • Dann die Layouts von innen nach ausen anlegen, Containern kann auch per 'Add Layout..' ein Layout zugewiesen werden, sie übernehmen dann also quasi die Layout- Funktion
    • die beteiligten Widgets markieren
    • über 'Add Layout' den markierten Widgets ihr jeweils übergeordnetes Layout zuweisen
    • dann die jeweiligen Layouts weiter zusammenfassen
    • in der obersten Ebene aber kann dem dem „Top“ Widget so kein Layout mehr zuweisen, was aber notwendig ist, damit die Gesamtheit im Fenster verteilt wird.
    • Für diese oberste Zuweisung muß man das Top- Widget auswählen und dann im QtDesigner- Menu den Punkt 'Form' auswählen. Da kann man dann dem Top- Widget auch ein Layout zuweisen und dann endlich passen sich die Widgets dynamisch der Fenstergröße an.

Compilieren der .UI- Dateien

pyuic5 dialog.ui > dialog.py

Kleines Beispiel

import sys
 
from PyQt5.QtWidgets import (
	QApplication, QDialog, QMainWindow, QMessageBox
)
from PyQt5.uic import loadUi
 
from  SAEJ_2799_ui import Ui_MainWindow
 
class Window(QMainWindow, Ui_MainWindow):
	def __init__(self, parent=None):
		super().__init__(parent)
		self.setupUi(self)
		self.connectSignalsSlots()
 
	def connectSignalsSlots(self):
		self.pushButton_connect.clicked.connect(self.connect)
		self.pushButton_send.clicked.connect(self.send)
		self.pushButton_clear_log.clicked.connect(self.clear_log)
		self.action_About.triggered.connect(self.about)
 
 
if __name__ == "__main__":
	app = QApplication(sys.argv)
	win = Window()
	win.show()
	sys.exit(app.exec())

Unterschiede zwischen interner und externer, model based Datenhaltung

Es gibt UI Elemente, die ihre Daten intern speichern, und welche, die mit einem externen Datenmodell syncronisieren. Je nach Anwendung nimmt man das eine oder andere. Die einzelnen Elemente sind auf der QT- Website erklärt

pc/qtdesigner.txt · Zuletzt geändert: 2023/12/09 12:56 von admin