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
ManfredP.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 ?