0

Does anyone can help here? I have two files called game.py and settings.py, I just want to get one value from settings to use in game, but I dont know what I am doing wrong.

the value I want it is in the function bbbbb...

THIS IS MY SETTINGS
from tkinter import*
import game

class Application(Frame):

    def __init__ (self, master):
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()

    def bbbbb(self):
        self.xr = self.ball_numbers.get()
        print("printing...", self.xr)
        return self.xr        

    def create_widgets(self):

        self.ball_numbers = IntVar()

        Label(self,text = "Select how many balls you wish to play:").grid()

        Radiobutton(self, text = "1 Ball", variable = self.ball_numbers, value = 1, command = self.bbbbb).grid ()
        Radiobutton(self, text = "2 Balls", variable = self.ball_numbers, value = 2, command = self.bbbbb).grid ()
        Radiobutton(self, text = "3 Balls", variable = self.ball_numbers, value = 3, command = self.bbbbb).grid ()


settings_window = Tk()
settings_window.title(" THE BOUNCER  -  Settings")
settings_window.geometry("600x600")
app = Application(settings_window)
settings_window.mainloop()

I need that value in the class handling_settings, in the function create_ball_numbers

AND THIS IS MY game.py

from livewires import games, color
from tkinter import*
import settings
import random

games.init(screen_width = 735, screen_height = 350, fps = 35)

class Bounce(games.Sprite):
    def update(self):

        if self.right > games.screen.width or self.left < 0: 
            self.dx = -self.dx

        if self.top < 0:
            self.dy = -self.dy

        if self.bottom == 315 and self.overlapping_sprites: 
            self.dy = -self.dy


class Bar_moving(games.Sprite):
    def update(self):   

        self.x = games.mouse.x  
        self.y = 315

class handling_settings():

    self.yr = bbbbb()
    print("printing number from settings  ", self.yr)

    def create_ball_numbers(self):
        print("inside def", self.yr)



def main():

    background = games.load_image("BG.jpg", transparent = False)
    games.screen.background = background

    call = handling_settings()
    call.create_ball_numbers()

    bar_small = games.load_image("bar_small.jpg", transparent = False)
    the_bar_small = Bar_moving(image = bar_small, x = games.mouse.x)

    games.screen.add(the_bar_small)
    games.mouse.is_visible = False
    games.screen.event_grab = True

    games.screen.mainloop()


main()    


I think I am not using on the right way IMPORT on top of the file.... keeping appearing this msg...

File "C:\Users\Bruno\Desktop\DIT\Object Oriented Programming\GAME - Assignment\game.py", line 3, in <module>
    from settings import bbbbb
ImportError: cannot import name bbbbb

If I run both files individually... its ok... but when I try to get the value in bbbbb function in settings, I get stuck...

3
  • Try self.yr = app.bbbbb() Commented Mar 22, 2014 at 11:38
  • You are trying to use a class function bbbbb() directly, it's allowed. You need to call it with a class object (e.g. app). For that, you can put the variable into builtins and then use it. Commented Mar 22, 2014 at 11:40
  • "name 'app' is not defined" doesnot work Commented Mar 22, 2014 at 12:03

2 Answers 2

1

You have a circular import; settings imports game, which imports settings. At that time, neither module is fully done initializing (anything beyond the import lines has not yet run).

You don't actually use the game module in settings, so just remove the import game line from settings.py.

In game.py, you imported the settings name; bbbbb is an attribute on the Application class in that module. The line:

self.yr = bbbbb()

will never work here.

You should definitely not create a new Tk() root window in settings, however; you can only ever have one main loop in a Tk application. Make settings a dialog window triggered by the main application in game.

So to get the bbbbb() result, you need to instead spawn the settings dialog box, let the user interact with it, and then retrieve the ball_numbers setting when the user closes the dialog again.

Sign up to request clarification or add additional context in comments.

1 Comment

I just removed but when I run game now it is saying "NameError: name 'bbbbb' is not defined"
0

First don't do any circular import, in settings.py there is no need to import game module.

As bbbbb is a function of class Application, therefore it cannot be called directly, to call it we need an object of the same class, which is already created as

app = Application(settings_window)

so, in module game.py, just use app object to call bbbbb()

self.yr = settings.app.bbbbb()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.