PushButton-Funktion greift immer nur auf einen Tab zu
Verfasst: Montag 29. Mai 2017, 19:01
Hallo Leute, ich sitze schon ein paar Tage an einem Problem, dass ich leider nicht mehr ohne Hilfe lösen kann.
Allgemein geht es darum, dass ich Fenster erstelle, das dynamisch auf die Eingaben in einem vorherigen Fenster reagieren soll. Ich übergebe z.B. die Zahl 5 und im neuen Fenster werden mir 5 Tabs geöffnet. Dies funktioniert auch problemlos. Jeder Ok-Button (Pushbutton) in meinem Tab soll nun alle Eingaben z.B. Lineedits in dem jeweiligen Tab an eine neue Klasse übergeben und mir diese zur Kontrolle ausgeben. Mein Problem ist nun, dass jeder Ok-Button mir nur die Daten des letzten Tabs gibt, aber nicht die Daten im eigentlichen Tab.
Ich geb euch hier im Folgenden mal ein Minimalbeispiel.
Achja, ich programmiere zwar schon etwas länger in Python, aber erstelle zum erstenmal eine Gui. Vieles könnte man sehr wahrscheinlich sehr viel schöner machen, ich bin also für Tipps aller Art sehr dankbar.
Er gibt mir hier als Ausgabe für jeden Ok-Button immer die Zahl (self.anzahl-1) aus.
Ich hab mir überlegt, dass ich das Fenster ja zunächst initialisiere, die gesamte for-Schleife also natürlich durchläuft und der letzte Wert für i immer übergeben wird, sobald ich auf irgendeinen Ok-Button drücke (es quasi erzwungen wird i zu speichern, bis ich Ok-Drücke und dies ist dann natürlich der höchste Wert).
Ich hab es danach auch mal mit einer Push-Button-Klasse versucht und über set_zahl schon bei der Initalisierung des Fensters jedem Button auch seine jeweilige Tab-Zahl zu übergeben. Aber selbst hier tritt das Problem auf, dass ich sobald ich den Wert in der Funktion abrufen möchte, nur die vorher initialisierte, nicht aber die zugeordnete Zahl erhalte, obwohl ich durch Abfrage, beim Initialisieren des Fensters die richtige Zahl erhalte. Tatsächlich muss ich also einen gewaltigen Fehler beim Zuordnen der Funktion beim Drücken des Buttons falsch gemacht haben.
Ich bin für jede Hilfe dankbar, da ich ohne dieses Problem zu lösen, nicht bei meinem Programm weiterkomme. Wenn ich außerdem etwas grundlegend falsch beim Gui-Programmieren, wie z.B. alles über Listen zu lösen, gemacht habe, wäre ich auch hier dankbar Tipps zu bekommen.
Ansonsten noch einen schönen Abend!
Allgemein geht es darum, dass ich Fenster erstelle, das dynamisch auf die Eingaben in einem vorherigen Fenster reagieren soll. Ich übergebe z.B. die Zahl 5 und im neuen Fenster werden mir 5 Tabs geöffnet. Dies funktioniert auch problemlos. Jeder Ok-Button (Pushbutton) in meinem Tab soll nun alle Eingaben z.B. Lineedits in dem jeweiligen Tab an eine neue Klasse übergeben und mir diese zur Kontrolle ausgeben. Mein Problem ist nun, dass jeder Ok-Button mir nur die Daten des letzten Tabs gibt, aber nicht die Daten im eigentlichen Tab.
Ich geb euch hier im Folgenden mal ein Minimalbeispiel.
Achja, ich programmiere zwar schon etwas länger in Python, aber erstelle zum erstenmal eine Gui. Vieles könnte man sehr wahrscheinlich sehr viel schöner machen, ich bin also für Tipps aller Art sehr dankbar.
Code: Alles auswählen
class Ui_window_schutz(object):
def __init__(self):
self.anzahl = 1
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1050, 700)
(...)
self.tabWidget = QtWidgets.QTabWidget(Dialog)
self.tabWidget.setObjectName("tabWidget")
self.tab = []
self.pushButton_tab = []
self.label_schutzbezeichnung = []
self.lineEdit_schutzbezeichnung = []
(...)
for i in range(self.anzahl): #self.anzahl ist hier der übergebene Wert des ersten Fensters
self.tab.append(QtWidgets.QWidget())
self.pushButton_tab.append(QtWidgets.QPushButton(self.tab[i]))
(...)
self.pushButton_tab[i].clicked.connect(lambda: self.click_tab_ok(i))
self.tabWidget.addTab(self.tab[i], "")
def click_tab_ok(self, zahl):
print(zahl)
print(self.lineEdit_schutzbezeichnung[zahl].text())
(...)
Ich hab mir überlegt, dass ich das Fenster ja zunächst initialisiere, die gesamte for-Schleife also natürlich durchläuft und der letzte Wert für i immer übergeben wird, sobald ich auf irgendeinen Ok-Button drücke (es quasi erzwungen wird i zu speichern, bis ich Ok-Drücke und dies ist dann natürlich der höchste Wert).
Ich hab es danach auch mal mit einer Push-Button-Klasse versucht und über set_zahl schon bei der Initalisierung des Fensters jedem Button auch seine jeweilige Tab-Zahl zu übergeben. Aber selbst hier tritt das Problem auf, dass ich sobald ich den Wert in der Funktion abrufen möchte, nur die vorher initialisierte, nicht aber die zugeordnete Zahl erhalte, obwohl ich durch Abfrage, beim Initialisieren des Fensters die richtige Zahl erhalte. Tatsächlich muss ich also einen gewaltigen Fehler beim Zuordnen der Funktion beim Drücken des Buttons falsch gemacht haben.
Ich bin für jede Hilfe dankbar, da ich ohne dieses Problem zu lösen, nicht bei meinem Programm weiterkomme. Wenn ich außerdem etwas grundlegend falsch beim Gui-Programmieren, wie z.B. alles über Listen zu lösen, gemacht habe, wäre ich auch hier dankbar Tipps zu bekommen.
Ansonsten noch einen schönen Abend!