我有一个pygame项目,它有一个主菜单 - 在所说的菜单中我有它,这样点击 Options 按钮就会触发一个Tkinter UI打开。 UI具有影响游戏速度的OptionMenu
小部件。如何在我用于创建Tkinter窗口的类之外检索OptionMenu
的值
这是一个简化的问题:
class GUI(object):
def __init__(self):
import Tk # etc...
# CODE FOR THE PROGRAM WINDOW
defaultSpeed = StringVar(root)
speedMenu = OptionMenu(root, defaultSpeed, 'Slow', 'Normal, 'Fast')
speedMenu.pack()
我知道我需要defaultSpeed.get()
才能获得价值。
Pygame菜单有:
click = pygame.mouse.get_pressed()
clicked = click[0] == 1
if "Play" clicked:
startGame(ticks)
if "Options" clicked:
options = GUI()
此时^^^我如何以某种方式获得速度(defaultSpeed.get()
)并将其作为全局变量,以便我可以在startGame
函数中使用它来影响上的滴答数时钟?
考虑到这一点,我基本上要求在初始化Tkinter类时如何定义全局变量?
我尝试在GUI()中创建一个名为getSpeed
的函数并调用options.getSpeed()
但由于某种原因我仍然有一个逻辑错误,这意味着它实际上从未打印/显示/返回。
我知道你在__init__
时不应该返回值 - 我应该只移动我的所有Tkinter应用程序。到GUI()
内的某个函数并将__init_
退出?我当然可以避免将其搞砸?在程序上通过OOP进行编程会更好(允许我在主菜单中简单地调用GUI()
)吗?
感谢任何帮助解决。
重新调整问题:
编辑:我被要求提供最少的代码 我现在很忙,但这里是最小的伪代码 - 所有你需要做的就是创建游戏窗口和菜单的尺寸(它们都是940,500)
import pygame
import time
import math
import tkinter
from tkinter import *
pygame.init()
clock = pygame.tick.Clock()
ticks = 0
#Here is all the game code
#This function is the main game and includes the game loop
def StartGame(ticks):
running = True
myGame1 = teams()
myGame1.startTeam()
#Here is some functions providing the rules of the sport
def updateBall(ticks):
theBall.x += float(theBall.speed) * ticks / 1000
while running:
myGame1.displayPlayers()
updateBall(ticks)
#Calling alot of functions and the game running is here
ticks = clock.tick(30)
pygame.display.flip
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
quit
def game_intro(menu_image):
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
quit
click = pygame.mouse.get_pressed()
clicked = click[0] == 1
if 62+288 > mouse[0] > 62 and 150+28 > mouse[1] > 150:
if clicked:
startGame(ticks)
pass
elif 62+288 > mouse[0] > 62 and 230+30 > mouse[1] > 230:
if clicked:
options = GUI()
class GUI(object):
def __init__(self):
root = self.root = tkinter.Tk
root.geometry('500x400')
root.configure(background = '#ffffff')
speedLabel = tkinter.Message(root, text = 'Game speed: ')
defaultSpeed = StringVar(root)
speedMenu = OptionMenu(root,defaultSpeed, 'Slow', 'Normal', 'Fast')
speedLabel.grid(row = 0, column = 0)
speedMenu.grid(row = 0, column = 1)
game_intro(menu_image)
答案 0 :(得分:2)
在创建defaultSpeed
:
global defaultSpeed
然后在您访问它之前:
global defaultSpeed
它基本上意味着您可以在使用global
后从任何地方访问变量。