Reputation: 1
from Tkinter import *
import random
root = Tk()
root.title="Space Game.py"
root.geometry=("1000x1000+500+300")
class Space(Frame):
def __init__(self, master):
**self.MetalResource = 1000000
self.CrystalResource = 1000000
self.GasResource = 1000000**
Frame.__init__(self, master, bg="#999999")
self.grid()
self.pack()
self.create_widgets()
def create_widgets(self):
self.Metal = Label(self, text="Metal", width=10, bg="#99CCFF")
self.Metal.grid(row=1, column=1)
self.MetalValue = Label(self, text=self.MetalResource, width=10, bg="#99CCFF")
self.MetalValue.grid(row=1, column=2)
self.Crystal = Label(self, text="Crystal", width=10, bg="#99CCFF")
self.Crystal.grid(row=2, column=1)
self.CrystalValue = Label(self, text=self.CrystalResource, width=10, bg="#99CCFF")
self.CrystalValue.grid(row=2, column=2)
self.Gas = Label(self, text="Gas", width=10, bg="#99CCFF")
self.Gas.grid(row=3, column=1)
self.GasValue = Label(self, text=self.GasResource, width=10, bg="#99CCFF")
self.GasValue.grid(row=3, column=2)
self.MetalMine = Button(self, text="Metal Mine", width=10, comman=self.MetalMineGUI, bg="#0000FF", fg="#FFFFFF")
self.MetalMine.grid(row=5, column=4)
self.MetalStorage = Button(self, text="Metal Storage", width=20, bg="#0000FF", fg = "#FFFFFF")
self.MetalStorage.grid(row=5, column=2)
def MetalMineGUI(self):
root2 = Tk()
root2.title="Beginner Level"
root2.geometry=("400x400+500+300")
class MetalMineGUI(Frame):
def __init__(self, master):
self.Level = 0
Frame.__init__(self, master, bg="#3399FF")
self.grid()
self.pack()
self.create_widgets()
def create_widgets(self):
if self.Level == 0:
a = "Build"
Metal = 500
Crystals = 250
Gas = 100
else:
a ="Upgrade"
Metal = 500*self.Level
Crystals = 250*self.Level
Gas = 100*self.Level
self.Upgrade = Button(self, text=a, width=10, command=self.Upgrade, bg="#99FFFF")
self.Upgrade.grid(row=3, column=5)
self.Details = Label(self, text="Details", width=30, bg="#3399FF")
self.Details.grid(row=1, column=1, columnspan=3)
self.level = Label(self, text="Level", width=5, bg="#3399FF")
self.level.grid(row=1, column=4)
self.lvl = Label(self, text=self.Level, width=5, bg="#3399FF")
self.lvl.grid(row=1, column=5)
self.Need = Label(self, text="Need:", width=10, bg="#3399FF")
self.Need.grid(row=2, column=1)
self.MetalNeeded = Label(self, text=Metal, width=10, bg="#3399FF")
self.MetalNeeded.grid(row=2, column=2)
self.CrystalsNeeded = Label(self, text=Crystals, width=10, bg="#3399FF")
self.CrystalsNeeded.grid(row=2, column=3)
self.GasNeeded = Label(self, text=Metal, width=10, bg="#3399FF")
self.GasNeeded.grid(row=2, column=4, columnspan=2)
def Upgrade(self):
self.Level+=1
**self.MetalResource-=Metal
self.CrystalResource-=Crystals
self.GasResource-=Gas**
app = MetalMineGUI(root2)
root.mainloop()
app = Space(root)
root.mainloop()
Trying to get the self.MetalResource, the self.CrystalResource and the self.GasResource to be taken into account when the Build/Upgrade button is clicke. But when it is clicked it says that MetalMineGUI ahs now attribute self.MetalResource.
Upvotes: 0
Views: 51
Reputation: 4129
The problem is that MetalResource
, CrystalResource
and GasResource
are properties of the Space
class, not the MetalMineGUI
class and the MetalMineGUI
has no reference to the Space
class.
You defined the class like so
class OuterClass():
def my_method(self):
class InnerClass():
pass
I'm not sure what you intended by this, but I don't see any reason that you would need to do this. Instead try something like
class Space(Frame):
...
class MetalMineGui(Frame):
def __init__(self, master, space):
self.space = space
...
def Upgrade(self):
self.space.MetalResource -= Metal
...
Also as written, Metal isn't defined in the Upgrade
function's scope. So you'll want to move the cost calculations into the Upgrade
function or something similar.
Upvotes: 1