Wie kann ich ein QWidget aus einer QWindows-Klasse aufrufen ?



  • Hallo erstmalig,

    schön dass es doch noch ein deutsches Programmierer-Forum gibt, wo offensichtlich doch noch ein bisschen was los ist.

    Habe vor kurzem mit Python angefangen (nach C, Java und ein wenig C#), weil mich diese Sprache schon länger fasziniert hat. Es macht wirklich Spass, damit zu programmieren und habe damit begonnen, ein grösseres Programm mit einer Qt-Oberfläche in Angriff zu nehmen. Aber Spass beiseite...

    Folgendes Problem:

    Bislang habe ich eine (Haupt-)QWindow-Klasse mit u.A. diversen Buttons und eine QWidget-Klasse mit Eingabefeldern (und OK- und Abbruch-Button).

    Jetzt möchte ich mit einem Button in der Hauptklasse dieses QWidget aufrufen (Signals und Slots funzen schon). Wenn ich das im QWindow-Klassen-Kontext mache, erscheint das Widget aber nicht, wenn ich es ganz normal auf einen lokalen Namen der QWindow-Klasse instanziere (oder sollte ich besser sagen zuweise?).

    Wenn ich aber dort einen globalen Namen definiere und auf diesen Namen dann die Widget-Klasse instanziere, geht es.

    Es funktioniert auch, wenn ich die Widget-Klasse in der main() instanziere.

    Wie bekomme ich das hin, dass das QWidget auch in dem QWindow-Klassen-Kontext funktioniert ?

    Grüße
    Manfred

    P.S.: Wenn meine Terminologie noch nicht ganz python-mäßig ist, bitte ich um Nachsicht und Korrektur 😉

    EDIT: Oh, doch nicht so viel los ...

    habe jetzt noch eine Möglichkeit gefunden, wie es funktioniert:

    class MainWindow(QtGui.QMainWindow):
    
        def __init__(self):
            super(MainWindow, self).__init__()
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            self.show()
    
        def new_button(self):
    #        edit_widget = ed.EditData()        1. Versuch: geht nicht !
    #        global edit_widget                 2. Versuch
    #        edit_widget = ed.EditData()           geht !
            self.edit_widget = ed.EditData()  # geht auch !
    
    def main():
        app = QtGui.QApplication(sys.argv)
        ex = MainWindow()
    #    edit_widget = ed.EditData()        geht auch (selbstredend, denke ich)!
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

    Also: edit_widget ist lokal in new_button() und self.edit_widget ist eine Instanz-Variable. Die QWidget-Klasse muss also einer Instanz-Variablen zugewiesen werden ? Das ist alles ? Oder macht man das doch anders ?

    Wenn wir schon da sind (wenn es überhaupt jemanden interessiert...probiere es einfach mal), wie komme ich aus dem MainWindow-Kontext in den Package-Kontext ? Geht das auch ?


Anmelden zum Antworten