GUI aus verschiedenen classes

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Phobit
User
Beiträge: 158
Registriert: Freitag 4. Mai 2018, 18:13

Donnerstag 27. Dezember 2018, 17:17

Hi,
ich versuche derzeit einen Gui mit qt zu schreiben, wobei ich auf mehrere Klassen zurückgreife...
Blöd gesagt, Ziel ist ein Fenster mit simplen Button.
Hier mein derzeitiger Code:

Code: Alles auswählen

import sys

from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QHBoxLayout

from Database.qtdb import window, button


class Tester(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
    
        fenster = window.__init__(self, 300, 300, 300, 280, "Tester.py")
        testButton = button.__init__(self, "TestButton", 10, 10)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Tester()
    sys.exit(app.exec_())
So, hier einmal die Class "window":

Code: Alles auswählen

class window(QWidget):
    def __init__(self, a, b, c, d, e):
        self.setGeometry(a, b, c, d)
        self.setWindowTitle(e)
        self.show()
Und hier die Class button:

Code: Alles auswählen

class button(QWidget):
    def __init__(self, name, a, b):
        from PyQt5.QtWidgets import QPushButton
        btn = QPushButton(name, self)
        btn.resize(btn.sizeHint())
        btn.move(a, b)
Beim ausführen des Hauptprogrammes wird ein Fenster mit dem Titel "Tester.py" erzeugt. Der Button wird scheinbar auch erstellt, allerdings wird er nicht agngezeigt. Weiß wer woran das liegen könnte? Also bzw wie ich den Button auf das "window" Fenster kriege?
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Mätti
User
Beiträge: 7
Registriert: Freitag 28. Dezember 2018, 04:57

Montag 31. Dezember 2018, 18:42

Moin Phobit,

soweit ich weiß musst du bei QT noch ein Layout erstellen und den Butten separat zum Layout hinzufügen!

Code: Alles auswählen

self.fenster.layoutHorizontal = QHBoxLayout(self)					#Setzt ein horizontales Layout
self.fenster.layoutHorizontal.addStretch(1)							#Setzt einen Abstandshalter ein (1 = relative Göße)
self.fenster.layoutHorizontal.addWidget(self.testButton)				#Setzt ein Widget in das Layout ein (hier deinen Button)	
		
self.fenster.layoutVertikal = QVBoxLayout(self)						#Setzt ein vertikales Layout
self.fenster.layoutVertikal.addStretch(1)								#Setzt einen Abstandshalter
self.fenster.layoutVertikal.addLayout(self.fenster.layoutHorizontal)		#Fügt das horizontale Layout zum vertikalen Layout hinzu
self.fenster.layoutVertikal.addStretch(1)					
		
		
self.fenster.setLayout(self.fenster.layoutVertikal)						#Setzt das vertikale Layout als Haupt-Layout
	
Es gibt nicht nur Box-Layouts, aber da bin ich kein Experte!
Ich arbeite sehr gerne mit Tabs, deshalb weiß ich nich 100% ob der Code hier bei dir eins zu eins funktionier, aber so in der Art sollte es gehen!
Hier noch n gutes Tutorial zu PyQt https://youtu.be/YvaGU9tKerY

LG und Guten Rutsch
Martin
Antworten