Widgets von einer anderen Klasse aufrufen (ui files)

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
sev
User
Beiträge: 16
Registriert: Freitag 19. Juli 2019, 22:01

Hallo zusammen,

leider scheitere ich an einem vermutlich einfachen Problem.

Ich habe zwei Fenster, MainPage und SecondWindow.

Wenn ich im SecondWindow auf pushButton_1 klicke, will ich, dass sich das Fenster schließt und dann ein label auf der MainPage verändert wird (setText).

Ich verstehe nur leider nicht, wie ich die Widgets von einem anderen Fenster ansprechen kann.

Kann mir bitte jemand helfen?

Vielen Dank und Gruß,
Sev

Code: Alles auswählen

import sys, time
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication

uifile_1 = 'second.ui'
form_1, base_1 = uic.loadUiType(uifile_1)

uifile_2 = 'main.ui'
form_2, base_2 = uic.loadUiType(uifile_2)


class SecondWindow(base_1, form_1):
   def __init__(self):
      super(base_1, self).__init__()
      self.setupUi(self)
      self.pushButton_1.clicked.connect(lambda: self.output('1'))


   def output(self, number):
      #global x
      #x = x + ' - ' + number
      self.main = SecondWindow()
      self.close()


class MainPage(base_2, form_2):
   def __init__(self):
      super(base_2, self).__init__()
      self.setupUi(self)
      self.pushButton_1.clicked.connect(lambda: self.change('1'))

   def change(self, number):
      global x
      x = number
      self.main = SecondWindow()
      self.main.show()

if __name__ == '__main__':
   app = QApplication(sys.argv)
   ex = MainPage()
   ex.show()
   sys.exit(app.exec_())
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mir ist da zu viel abgeleite von all denselben Klassen. Warum macht SecondWindow eine Instanz von sich selbst auf? Warum heisst eine Instanz von SecondWindow erzeugt in MainPage selbst auch self.main? Warum heisst MainPage im __main__-guard ex?

Wenn du die Namen mal vernuenftig aussortierst, dann wird das vielleicht auch klarer. Und ansonsten ist die Antwort wie eine Instanz on SecondWindow von einer Instanz von MainPage lernt (wenn das die eigentliche Frage ist) recht simpel: du uebergibst das per Konstruktor.

Code: Alles auswählen

class SecondWindow:
    def __init__(self, main_window, ...):
            self._main_window = main_window

    def button_click(self):
        self._main_window.tuwas()


class MainWindow:

     def change(self, ...):
          self._second = SecondWindow(self, ...)
sev
User
Beiträge: 16
Registriert: Freitag 19. Juli 2019, 22:01

Hallo deets,

vielen danke, erst habe ich mich schwer getan deine Antwort zu verstehen, aber ich habe es zum Laufen gebracht und auch schon etwas aufgeräumt.

Mir fehlte noch das Verständnis für Initialisierungen und musste mich zuerst etwas einlesen.

Danke dir.
Antworten