Aufruf von QWidgets in Klassen-Methoden
Verfasst: Dienstag 28. Januar 2014, 18:32
Hallo, ich trau mich noch mal,
erstmal, ein Ausschnitt aus meinem Programm als Grundlage (ich hoffe, ich habe es ohne Fehler runtergekürzt !):
Weil edit_widget lokal ist in action_of_new_button(), erscheint das Widget nicht. Ich habe aber 3 andere Wege gefunden, wie es funktioniert:
Weg Nr. 1:
lokale Variable edit_widget global definiert:
Das funktioniert fehlerfrei.
Weg Nr. 2:
Ich mache edit_widget zum Instanz-Attribut:
Das gibt Mecker vom Meister (PyCharm): "Instanz-Attribut ausserhalb von ___init___() definiert". Das darf man wohl nicht, funzt aber.
Weg 3:
Ich definiere edit_widget global in der Klassen-Definition:
Das habe ich so nirgens gelesen, mir war nur QObject eingefallen und da dachte ich, so könnte es gehen. Und es funktioniert ebenfalls fehlerfrei.
Nur weiss ich jetzt nicht, wie man es richtig macht. Die QObject-Methode erscheint mir am sinnvollsten ? Wenn das richtig ist, hätte ich dann direkt noch eine Frage: gibt es im "normalen" Python auch so etwas wie das QObject in Qt ?
Freundliche Grüße
mephisto-online
P.S.: Wenn noch irgend etwas mit meiner "Python-Terminologie" nicht stimmt oder unverständlich ist, bitte ich um Korrektur.
erstmal, ein Ausschnitt aus meinem Programm als Grundlage (ich hoffe, ich habe es ohne Fehler runtergekürzt !):
Code: Alles auswählen
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui
from mainwindow import Ui_MainWindow
import editdata as edw # QWidget
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.current_base_data = 0
...
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.show()
def action_of_new_button(self): # Slot in Ui_MainWindow
edit_widget = ed.EditData() # QWidget in Modul editdata=ed
...
def main():
app = QtGui.QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Weg Nr. 1:
lokale Variable edit_widget global definiert:
Code: Alles auswählen
global edit_widget
edit_widget = ed.EditData()
Weg Nr. 2:
Ich mache edit_widget zum Instanz-Attribut:
Code: Alles auswählen
self.edit_widget = ed.EditData()
Weg 3:
Ich definiere edit_widget global in der Klassen-Definition:
Code: Alles auswählen
class MainWindow(QtGui.QMainWindow):
edit_widget = QObject
...
def __init__(self):
...
def action_of_new_button(self):
edit_widget = ed.EditData()
Nur weiss ich jetzt nicht, wie man es richtig macht. Die QObject-Methode erscheint mir am sinnvollsten ? Wenn das richtig ist, hätte ich dann direkt noch eine Frage: gibt es im "normalen" Python auch so etwas wie das QObject in Qt ?
Freundliche Grüße
mephisto-online
P.S.: Wenn noch irgend etwas mit meiner "Python-Terminologie" nicht stimmt oder unverständlich ist, bitte ich um Korrektur.