2017-09-12 2 views
-1
class questions(tkinter.Tk): 

    def __init__(self, *args, **kwargs): 
     tkinter.Tk__init__(self, *args, **kwargs) 
     container = tkinter.Frame(self) 
     container.pack(side='top', fill='both', expand=True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 
     self.frames = {} 

     for F in (StartPage, QuestionOne, QuestionTwo) 
       frame = F(container, self) 
       self.frames[F] = frame 
       frame.grid(row = 0, column= 0, sticky='nsew') 
     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

    def show_choice(self, cont) 
     global pr_var 
     global x 
     questions.pr_var = x.get() 
     var_list[0]= questions.pr_var 
     print('pr_var = ' + str(questions.pr_var)) ## i print it to check 
     frame= self.frames[QuestionOne] 
     frame.tkraise() 

class Startpage(tkinter.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='Hello', font= LARGE_FONT) 
     label.pack(pady=10, padx=10) 
     button=ttk.Button(self, text='Start', command= Lambda:controller.show_frame(QuestionOne)) 
     button.pack() 

class QuestionOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='How many pieces?', font= LARGE_FONT) 
     label.grid(row= 3, column=1, pady=10, padx=50) 
     global x 
     self.radio_num= tkinter.IntVar() 
     x = self.radio_num 
     self.rb1 = tkinter.Radiobutton(self, text='one', variable=self.radio_num, value=1) 
     self.rb2 = tkinter.Radiobutton(self, text='two', variable=self.radio_num, value=2) 
     self.rb1.grid(row=5, column=0, padx=10) 
     self.rb2.grid(row=6, column=0, padx=10) 
     button1=ttk.Button(self, text='Next', command= Lambda:controller.show_choice(self)) 
     button2=ttk.Button(self, text='back', command= Lambda:controller.show_frame(StartPage)) 
     button1.grid(row=25, column=1, padx=10, pady=50) 
     button2.grid(row=25, column=0, padx=10, pady=50) 

class QuestionTwo(tkinter.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='So you have ' +str(var_list[0]) + ' piece(s)', font= LARGE_FONT) ## here is the problem 
     label.grid(row= 3, column=1, pady=10, padx=50) 
     global x 
     global pr_var 
     button1=ttk.Button(self, text='back', command= Lambda:controller.show_frame(QuestionOne)) 
     button1.grid(row=25, column=1, padx=10, pady=50) 

app=questions() 
app.mainloop() 

Ich arbeite gerade an einem Programm, und ich würde ein bisschen Hilfe schätzen. ich bin ziemlich neu in der Programmierung im Allgemeinen so bitte Geduld .. :-)Klasseninstanzen in Listen als Variablen speichern (außerhalb einer Klasse) Python

so schrieb ich ein Programm, das einige Variablen vom Benutzer und dann verarbeitet sie (ich absolvierte dieses Verarbeitungsprogramm, so hier gibt es keine Hilfe erforderlich). Dann begann ich eine GUI zu schreiben, wo einige Fragen gestellt werden und die Eingabe vom Benutzer als Variable gespeichert wird. Am Ende dieser Fragen werden alle Variablen gespeichert und aus dem Bearbeitungsprogramm verwendet.

Also wo ich feststecke ist, dass ich die Variablen nicht speichern kann !!

i Klassen verwende für die Gui..where die erste Klasse der Hauptrahmen in Form hält:

def __init__(self, *args, **kwargs) 

und für jede Seite i verwenden, erstelle ich eine neue Klasse (neuer Rahmen), der bezieht sich zu der primären Klasse.

Jetzt ist das Problem, dass zum Beispiel auf Seite 2, wo der Benutzer zum ersten Mal ein Optionsfeld wählt, der Wert von einer Methode der Primary-Klasse (wo immer jede neue Seite sich bezieht) mit 'Befehl' und berechnet wird Innerhalb dieser Methode drucke ich den Wert nach der Berechnung (um zu sehen, ob er korrekt gespeichert ist) und es funktioniert. Bis hier ist alles in Ordnung.

Mein Problem ist, wenn ich die gespeicherten Variablen in Seite 3 funktioniert es nicht verwenden ...

Ich habe versucht, die Klasseninstanz als globale Variable zu machen und es funktioniert nur innerhalb der Methode der primären class..after wenn ich es in einer anderen Klasse benutzen will (ich meine auf einer anderen Seite), funktioniert es nicht. Ich habe versucht, einen Verweis als ClassA.Variable zu machen, aber das hat auch nicht funktioniert .. Ich versuche, die Variable innerhalb der Init-Methode mit None zu definieren (sonst bekomme ich, dass die '' Variable '' nicht definiert ist) und wenn es von Seite 2 berechnet, funktioniert es, aber wenn ich auf Seite 3 die Variable in Form eines Strings innerhalb eines Labels mit tkinter einfügen will, dann bekomme ich den Wert None, obwohl ich eine globale Variable sein sollte ... ich bin sehr verwirrt

Mein Hauptziel ist es, eine Liste mit den Variablen zu erstellen, die der Benutzer mit Radio-Buttons geben wird. Diese Liste muss außerhalb einer Liste stehen, damit das Verarbeitungsprogramm sie problemlos aufrufen kann.

ich das versucht too..to eine Liste zu machen, aber wenn ich auf die Liste siehe [0] (zum Beispiel für die erste Variable i erhalten dann, dass ... Listenindex außerhalb des zulässigen Bereichs

Wie kann ich nehmen Klasseninstanzen und sie in der Liste Komponenten als Variablen ??

PS: die Variablen sind nicht ganze Zahlen oder strings..the sind Verweise auf eine Klasseninstanz zum Beispiel ......

list[0] = x.get() 

wo global x und

self.radio_num =tkinter. IntVar() 

und

x= self.radio_num 

PS2: Ich weiß nicht, ob ich alles richtig erklärt, so dass jemand genau verstehen, was mein Problem ist ...wenn nicht, könnte ich einige Code hochladen, wenn

benötigt

entweder Weg trotzdem danke :-)

+0

Können Sie eine Kopie des Codes bereitstellen? –

+0

Ich habe gerade einen Teil des Codes hochgeladen..ich hoffe, dass jetzt mein Problem leichter zu verstehen ist – GeorgM

Antwort

-1

eine Liste erstellen zu Beginn des Moduls namens Klassen. In der __init__() Funktion der Klassen, die Sie speichern möchten, setzen:

global classes 
classes.append(self) 

Diese Sie die Variablen als Attribute zugreifen können.

+0

kannst du mir bitte erklären, wie es geht ?? Ich habe versucht, die Liste global innerhalb der Methode Show_choice, aber es funktioniert immer noch nicht auf Seite 2 – GeorgM

+0

Ich klärte meine Antwort zu erklären, wie Sie die Liste implementieren würde. –

+0

Dank für Ihre Hilfe, aber ich kann es immer noch nicht machen work..first aller, wenn ich nicht irre, wenn jemand nutzt anhängen, es wird nur in die Liste Inhalt hinzufügen und wenn der Benutzer zurück und drückt dann nächstes vielleicht die Variablen nicht Ich werde später an der richtigen Stelle sein..so ich denke, dass die Einfügemethode sicherer ist, dass die Variablen immer im richtigen Index gespeichert werden. und zweitens alle getippt ich es genau so, wie Sie mir gesagt, und die gute Nachricht ist, dass ich nicht mehr Keine sehen, wenn sie die Variable aus der Liste verwendet, aber es gibt mir Zahl wie .58345200.72500432 wo die richtige Antwort wäre ‚1‘ – GeorgM

Verwandte Themen