Seite 1 von 1
Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Montag 18. November 2019, 19:57
von Kai-Behncke2
Hallo liebe Leute,
ich habe eine Gui erstellt mit verschiedenen Buttons.
Uch suche nun eine Möglichkeit, dass ein Button gedrückt wird OHNE (!!), dass auf diesen manuell gedrückt wird.
Bislang sieht es so aus:
Code: Alles auswählen
class alkisImportDlg(QDialog, alkisImportDlgBase):
def __init__(self):
QDialog.__init__(self)
self.setupUi(self)
self.setWindowIcon(QIcon('logo.svg'))
self.setWindowFlags(Qt.WindowMinimizeButtonHint)
self.leSERVICE.setText(s.value("service", ""))
self.leHOST.setText(s.value("host", "xxxx.xxxxxren.intern"))
self.lePORT.setText(s.value("port", "5432"))
self.leDBNAME.setText(s.value("dbname", "alkisnas7"))
.....
......
self.pbStart.clicked.connect(self.run)
In meiner ui-Datei ist der Button wie folgt definiert:
<item>
<widget class="QPushButton" name="pbStart">
<property name="text">
<string>Starten</string>
</property>
</widget>
</item>
Wonach ich jedoch mittlerweile einigermaßen verzweifelt suche ist eine Möglichkeit, dass der Button durch den Code "gedrückt" wird, nachdem die Gui geladen ist.
Kennt jemand da eine Möglichkeit?
Danke im Voraus, Kai
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Montag 18. November 2019, 20:08
von Sirius3
Warum rufst Du nicht einfach `run` direkt auf?
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Dienstag 19. November 2019, 14:50
von Kai-Behncke2
Hallo Sirius,
danke für die Antwort. Darauf wird es dann wohl hinauslaufen.
Ich habe nun alle Variablen, die eigentlich durch die GUI übermittelt werden, im Source-Code hart kodiert.
Trotzdem ist mir nicht ganz klar, wie ich "run" nun starte.
Bislang war es so, dass die Gui über
aufgerufen wurde.
Ich habe nun versucht z.B.:
...ohne Erfolg.
Die Funktion "run" ist wie folgt definiert:
Was mir völlig unklar ist: Was bedeutet dieses "self"?
Hast Du einen Tipp, wie ich run(self) direkt starten kann, ohne die Gui?
Danke und Grüße, Kai
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Dienstag 19. November 2019, 14:59
von __deets__
Das "self" ist absolute Python OO Grundlage. Ohne das zu verstehen wirst du nicht weit kommen. Und die Syntax oben mit "dlg=run()" ist wild geraten. Du musst schon ein bisschen Python koennen, wenn du darin programmieren willst.
run ist eine Methode einer Klasse. self ist die Referenz auf die Instanz einer Klasse. Ein simples Beispiel:
Code: Alles auswählen
class BMW3er:
def aufraeumen(self):
print(f"ich habe {self} aufgeraeumt")
mein_auto = BMW3er()
irgend_jemandes_anderes_auto = BMW3er()
mein_auto.aufraeumen()
Klassen sind also eine Art Blaupause fuer Objekte. Methoden sind Vorgaenge die man mit einer Instanz einer Klasse machen kann, und dann erzeugt man konkrete Instanzen von Klassen, und arbeitet mit denen indem man eine Methode aufruft. Wie du siehst geht das nicht mit mein_auto=aufraeumen(). Sondern anders.
GUI- und Qt-Programmierung im besonderen erfordern eine ganze Reihe von Programmierkenntnissen - die musst du dir draufschaffen, mit zusammenstuempern wird das nichts werden.
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Dienstag 19. November 2019, 15:15
von Sirius3
@Kai-Behncke2: aus Deinen Programmfetzen wird mir nicht klar, was Du eigentlich erreichen willst. Am Anfang war es einen Knopfklick zu "simulieren", jetzt scheint es so zu sein, dass Du einen Dialog öffnen oder schließen willst? Ich versteh es einfach noch nicht.
Kannst Du mal von Anfang an erzählen, was Du machen willst?
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Dienstag 19. November 2019, 15:25
von __blackjack__
@Kai-Behncke2: Ich vermute mal es geht um das hier:
https://github.com/norBIT/alkisimport/b ... sImport.py
Die `run()`-Methode ist ja irgendwie ein bisschen zu klein um sinnvoll zu sein. Dafür ist dann die dort aufgerufene `importALKIS()`-Methode sportliche 544 Zeilen lang und die Programmlogik ist natürlich auch nicht sauber von der GUI getrennt. Ich sage da mal nichts weiter zu.

Bist nicht zu beneiden.
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Dienstag 19. November 2019, 16:04
von __deets__
Ah. Das erklaert natuerlich, wie so viel Code zustande kommt, und so wenig Verstaendnis fuer selbigen. Der Autor scheint doch noch aktiv, frag ihn doch einfach, ob er das als Feature einbaut.
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Mittwoch 20. November 2019, 09:31
von Kai-Behncke2
Danke an alle für die Rückmeldungen. Habe es jetzt hinbekommen (ist, wenn man sich in den Code eingearbeitet hat, dann doch einfacher als gedacht).
Einfach innerhalb der Klasse, welche die Gui öffnet, den Befehl:
self.run()
setzen. Dann startet die Gui auch ohne, dass man die Startprozedur über den Button anklickt.
Das Ziel war letztlich automatisiert über eine Powershell-Prozedur die Anwendung regelmässig nachts zu starten, um immer wieder auf die neuesten Datenzugreifen zu können. Das setzt voraus, dass nicht "händisch" auf den Start-Button geklickt werden muss. Natürlich gibt es "elegantere" Wege, aber die gefundene Lösung erfüllt ihren Zweck.
Hilfreich generell bei der Fehleranalyse z.B. eine Ausgabe von Parametern z.B. über die QMessageBox:
QMessageBox.critical(None, "PyQt Demo", "BlaBlaBla", QMessageBox.Cancel)
Re: Automatisiert Button drücken nachdem GUI geladen wurde
Verfasst: Mittwoch 20. November 2019, 10:14
von sparrow
Also "automatisiert" und "GUI" ist in der Regel unschön.
Wenn beim Programm GUI und Logik vernünftig getrennt sind, ist es wahrscheinlich einfacher, einfacher das ganze ohne Oberfläche abzubilden. Wenn das nicht sauber getrennt ist, sollte das wohl jemand tun.