ich versuche gerade einen einstieg in Python zu finden. Normalerweise bin ich nur in der SPS - Programmierung zu Hause also bitte seit nachsichtig mit mir.
Zum Problem:
Ich möchte mir, für ein späteres Visualisierungsprojekt, die Fähigkeit aneignen, eigene Buttonklassen zu erstellen. Genauer gesagt, ich will nicht nur einen Butten mit nem Bild drauf, sondern den Button auch aktiv zeichnen bzw. animieren und mit globalen, eigenen Events verbinden können.
Ich versuche dabei einen möglichst objektorientierten Ansatz zu verwenden. Es sollen möglichst alle Funtionaliäten in einer Klasse sein, die ich dann genauso einfach wie zum Beispiel den QPuschButton implementieren kann.
Als Übung habe ich versucht, einen Button automatisch über ein eigenes Event in der mitte des Fensters zu Positionen, wenn sich die Größe des Fensters ändert.
Klar geht das auch über Layouts, es soll nur exemplarisch für ein eigenes, globales Event sein.
Ich denke der Stolperstein ist, das ich in der "Hauptfenster" und der "MyPushbutton" Klasse, jeweils eine eigene Instanz gebildet habe.
Allerdings weiß ich nicht so recht, wie ich das lösen kann.
Code: Alles auswählen
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
import sys
# Eigene Event Klasse
class OwnEvents(QtCore.QObject):
global_move = QtCore.pyqtSignal()
# Eigene Buttonklasse
class MyPushButton(QPushButton, OwnEvents):
fensterW = 10
fensterH = 10
def resize_func(self, fenster_w, fenster_h):
sig = OwnEvents()
sig.global_move.connect(self.glob_move)
type(self).fensterW = fenster_w
type(self).fensterH = fenster_h
print("resize_func ausgeführt")
def glob_move(self):
self.move(int((type(self).fensterW / 2) - (type(self).fensterH / 2)),
int((self.width() / 2) - (self.height() / 2)))
print("Event empfangen Test")
# Hauptfenster Klasse
class MainWidget(QWidget):
def __init__(self, widget_title):
super().__init__()
self.setWindowTitle(widget_title)
self.windowWidth = self.width() # aktuelle Fensterbreite speichern
self.windowHeight = self.height() # aktuelle Fensterhöhe speichern
self.exit_button = MyPushButton("Exit", self)
self.exit_button.clicked.connect(self.close_window)
self.exit_button.resize_func(self.windowWidth, self.windowHeight)
self.sig = OwnEvents()
def resizeEvent(self, event_e):
self.sig.global_move.emit()
print(f"Event ausgeführt: {event_e}")
def close_window(self):
self.close()
# Applikation starten/beenden
app = QApplication(sys.argv)
widget = MainWidget(widget_title="MainView")
widget.showMaximized()
sys.exit(app.exec_())