Ich hoffe, Sie können ein Memorandum erstellen und es korrigieren.
Ich denke, es ist einfach, eine Verarbeitung nur dann durchführen zu wollen, wenn die Anwendung zum ersten Mal angezeigt wird, aber es scheint, dass Sie MainWindow.show.connect nicht schreiben können (was für ein Durcheinander).
Ich habe nach Möglichkeiten gesucht, wie eine von VBA usw. durchgeführte onLoad-ähnliche Verarbeitung geschrieben werden kann, wobei die von Designer generierte Beschreibung der setupUI so weit wie möglich belassen und mit eventfilter gelöst wurde. Machen Sie sich also eine Notiz und korrigieren Sie sie.
self.startUpFilter = StartUpFilter()
self.centralwidget.installEventFilter(self.startUpFilter)
self.startUpFilter.installWidget(self.hoge,self.fuga)
Ich habe festgestellt, dass Show-Ereignisse an Centralwidget übergeben werden. Daher dachte ich, dass es besser ist, Eventfilter auf Centralwidget zu setzen und dies und das nur beim ersten Show-Ereignis zu schreiben, aber es wird von Eventfilter übergeben. Ist nur die Quelle des Ereignisses und des Ereignisses selbst, und ich weiß nicht, wie ich den von Designer aus diesem Ereignis erstellten Hoge und Fuga bedienen soll, und ich kann ihn nicht finden. Da eventfilter eine Klasse ist, dachte ich, dass es besser ist, das Widget selbst, das später verwendet wird, getrennt von installEventFilter zu registrieren. Deshalb habe ich eine Methode namens installWidget hinzugefügt. Der fertige StartUpFilter ist
class StartUpFilter(QtCore.QObject):
startupState = False
def installWidget(self,hoge,fuga):
self.hoge = hoge
self.fuga = fuga
def eventFilter(self, widget, event):
if event.type() == QtCore.QEvent.Type.Show:
if not self.startupState:
self.hoge.hogeMethod(self.fuga)
self.startupState = True
return False
Unterklasse Hoge und Fuga kann der Standard sein. Ich möchte einen Bericht veröffentlichen, der funktioniert, auch wenn ich ihn so schreibe, und darauf hinweisen, dass dies nicht gut ist.
Recommended Posts