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()
我目前正在制作一个计划,我希望得到一些帮助。 我是一般的编程新手所以请耐心等待......: - )
所以我编写了一个程序,它从用户那里获取一些变量,然后处理它们(我完成了这个处理程序,所以这里没有需要帮助)。然后我开始编写一个GUI,其中将询问一些问题,并且来自用户的输入将被保存为变量。在这些问题的最后,所有变量都将被保存并从处理程序中使用。
所以我被困住的地方是我无法保存变量!!
我正在使用Gui的类。其中第一个类以以下形式保存主框架:
def __init__(self, *args, **kwargs)
对于我使用的每个页面,我创建一个引用主类的新类(新框架)。
现在的问题是,例如在第2页,用户第一次选择了一个单选按钮,然后从主类的方法(每个新页面总是引用)中使用'command'计算值并在里面这个方法我打算计算后的值(为了看看它是否正确保存),它的工作原理。直到这里一切都好。
我的问题是,当我在第3页中使用已保存的变量时,它无效...
我试图将类实例作为全局变量,它只在Primary类的方法中工作。之后当我想在另一个类(我的意思是在另一个页面中)使用它时,它不起作用。 我试图将引用作为ClassA.variable但是也没有用。我尝试用init定义init方法中的变量(否则我得到''变量''没有定义)当它被存在时从第2页计算它可以工作,但在第3页我想把变量以字符串的形式放在带有tkinter的Label中然后我得到值None虽然我应该是一个全局变量...我很困惑< / p>
我的主要目标是制作一个列表,其中包含用户将通过单选按钮提供的变量。此列表必须位于列表之外,以便处理程序可以轻松访问它们。
我也试过......制作一个列表但是当我引用列表[0]时(例如对于第一个变量,我得到了...列表索引超出范围
如何将类实例转换为列表组件作为变量?
PS:变量不是整数或字符串......是对类实例的引用,例如......
list[0] = x.get()
其中全局x和
self.radio_num =tkinter. IntVar()
和
x= self.radio_num
PS2:我不知道我是否正确解释了所有内容,以便有人能够准确理解我的问题是什么......如果没有,我可以根据需要上传一些代码
无论如何都要感谢: - )
答案 0 :(得分:-1)
在模块的开头创建一个名为classes的列表。
在要存储的类的__init__()
函数中,输入:
global classes
classes.append(self)
这将允许您将变量作为属性访问。