Как вы меняете переменную в функции из другого класса и вызываете ее обратно? - PullRequest
0 голосов
/ 10 мая 2018

Я делаю игру с уровнями, и на каждом уровне мне нужно будет использовать разных операторов и / или разные диапазоны.Моя проблема в том, что я не знаю, как изменить переменные в функции из другого класса.Я хотел бы сделать это, чтобы мне не нужно было копировать и вставлять мой код, делая его длинным.Я хотел бы использовать 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') 

Я хочу поставить вопросы определеннымив уровень класса два при изменении его на self.Answer = int(numOne) * int(numTwo) и 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()

1 Ответ

0 голосов
/ 10 мая 2018

Создайте необходимые переменные в основном классе (BattleMaths), затем вы можете изменить их в дочерних классах с помощью controller.my_variable.

Пример: self.Answer создан в BattleMaths и доступен в levelone через controller.Answer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...