python - 如何从不同的类更改函数中的变量并将其回调?
问题描述
我正在制作一个有关卡的游戏,在每个关卡中,我都需要使用不同的运算符和/或不同的范围。我的问题是我不知道如何从不同的类更改函数中的变量。我想这样做,所以我不需要复制和粘贴我的代码,使其冗长。我想将 self.Answer 和 self.strQuestion 用于多个范围。
下面的代码只是为了使类起作用。
from tkinter import *
import tkinter as tk
import random
from Tkinter import messagebox
class BattleMaths(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.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, levelone, leveltwo):
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()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
lvl1_button = Button(self, text="LEVEL 1", command=lambda: controller.show_frame(levelone))
lvl1_button.place(relx=0.5, rely=0.5, anchor='center')
我想将问题 def 放入类 leveltwo 中,同时将其更改为self.Answer = int(numOne) * int(numTwo)
and self.strQuestion = "{} x {}".format(str(numOne), str(numTwo))
class levelone(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
def widgets(self):
#widgets here
def question(self):
self.UserAnswer = ''
numOne = random.randrange(1,10)
numTwo = random.randrange(1,10)
self.Answer = int(numOne) + int(numTwo) #change this
self.strQuestion = "{} + {}".format(str(numOne), str(numTwo)) #and change this
def answer(self):
#answer checker
class leveltwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
#question def here
root = BattleMaths()
root.title("Battle Maths")
root.geometry("400x250")
root.resizable(0,0)
root.mainloop()
解决方案
在主类(BattleMaths)中创建您想要的变量,然后您可以通过 controller.my_variable 在子类中更改它们。
示例:在via中self.Answer
创建BattleMaths
和访问levelone
controller.Answer
推荐阅读
- linux - 在文件中的变量完全匹配后打印所有列值
- html - 如何关闭字体上的红蓝轮廓(如色差)?
- docker - 如何通过 docker-compose 使用 Docker 的嵌入式 DNS 服务器进行构建?
- reactjs - 如何向 Firebase 的“放置”和“设置”查询操作添加异步功能
- cassandra - 如何使用 datastax 驱动程序将一组元组存储到 cassandra
- woocommerce - 根据 Woocommerce 中的产品运输类别限制添加到购物车
- django - 仅在访问媒体文件时出现 Cors Header 错误,应用程序的其余部分工作正常(DRF、pythonanywhere、React)
- mysql - 尝试向表中添加记录时出现错误 1054 (MySQL Workbench)
- python - 在 C# (IronPython) 中获取“没有名为 sklearn.model_selection 的模块”
- javascript - 无法在反应中有条件地渲染组件