2017-08-30 187 views
0

如何更改定义中的变量?我在互联网上搜索,但无法找到帮助我的东西。我发现全局变量可以帮助,但我不知道如何使用它们,我有另一个问题,我的代码甚至不反应我的“空间按钮”。这里是我的完整代码,我知道他们写不发布所有的代码,但也许这将帮助你,因为我什至不明白什么重要,什么不是。(我知道我不应该使用tkinter和pygame在一起,但我懒惰的代码和即时通讯noob,只知道tkinter)。如何更改定义中的变量

from pygame import * 
import pygame as pygame 
from tkinter import * 
import tkinter as tk 
from time import sleep 

#--------------------------------------- 

HEIGHT = 500 

WIDTH = 500 

window = Tk() 

window.title("Test") 

canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg="grey") 

canvas.pack(expand=False) 

#--------------------------------------- 

a = (5, 5) 
b = (85, 85) 
c = (415, 415) 
d = (495, 495) 
e = (5, 415) 
f = (85, 495) 

player = canvas.create_rectangle([a, b], tags="obj1Tag", fill = "red4") 
finish = canvas.create_rectangle([c, d], tags="obj2Tag", fill = "green4") 
arrow = canvas.create_rectangle([e, f], tags="obj3Tag", fill = "blue4") 

#--------------------------------------- 

mainloopon = True 
start = False 
start2 = False 
startwindow = True 
pms = 0.015625 
arrow_direction = ("None") 

#--------------------------------------- 

def start(event): 
    start = True 
    print ("start") 

canvas.bind('<space>', start) 

#--------------------------------------- 

colors = {"red":"blue4", 
      "blue4":"yellow", 
      "yellow":"green", 
      "green":"red"} 


def onObjectClick(event): 
    current_color = canvas.itemcget(arrow, "fill") 
    print (canvas.itemconfig(arrow, "fill")) 
    canvas.itemconfig(arrow, fill=colors[current_color]) 

canvas.tag_bind(arrow, '<ButtonPress-1>', onObjectClick) 

#--------------------------------------- 

while mainloopon == True: 

    if startwindow == True: 
     window.update() 

     if start2 == True: 
      if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'blue4'): 
       arrow_direction = ("right") 

      if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'red'): 
       arrow_direction = ("left") 


      if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'yellow'): 
       arrow_direction = ("up") 

      if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'green'): 
       arrow_direction = ("down") 

    if start == True: 
     canvas.move(player, 0, [pms]) 
     window.update() 
     #sleep(0.0001) 
     playerc = canvas.coords(player) 
     arrowc = canvas.coords(arrow) 

     if playerc == arrowc: 
      start = False 
      start2 = True 

    if arrow_direction == ("right"): 
     canvas.move(player, [pms], 0) 
     window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("left"): 
     canvas.move(player, [-pms], 0) 
     window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("up"): 
     canvas.move(player, 0, [-pms]) 
     window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("down"): 
     canvas.move(player, 0, [pms]) 
     window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

window.mainloop() 

编辑:

WIDTH = 500 

window = Tk() 

window.title("Test") 

canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg="grey") 

canvas.pack(expand=False) 

#--------------------------------------- 

a = (5, 5) 
b = (85, 85) 
c = (415, 415) 
d = (495, 495) 
e = (5, 415) 
f = (85, 495) 

player = canvas.create_rectangle([a, b], tags="obj1Tag", fill = "red4") 
finish = canvas.create_rectangle([c, d], tags="obj2Tag", fill = "green4") 
arrow = canvas.create_rectangle([e, f], tags="obj3Tag", fill = "blue4") 

#--------------------------------------- 

mainloopon = True 
start = False 
start2 = False 
startwindow = True 
pms = 0.015625 
arrow_direction = ("None") 

#--------------------------------------- 

def change_start(event): 
    global start 
    start = True 
    print (start) 

canvas.bind('<space>', change_start) 

#--------------------------------------- 

colors = {"red":"blue4", 
      "blue4":"yellow", 
      "yellow":"green", 
      "green":"red"} 


def onObjectClick(event): 
    current_color = canvas.itemcget(arrow, "fill") 
    print (canvas.itemconfig(arrow, "fill")) 
    canvas.itemconfig(arrow, fill=colors[current_color]) 

canvas.tag_bind(arrow, '<ButtonPress-1>', onObjectClick) 

#--------------------------------------- 

while mainloopon == True: 

    if startwindow == True: 
     window.update() 

    if start2 == True: 
     if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'blue4'): 
      arrow_direction = ("right") 

     if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'red'): 
      arrow_direction = ("left") 


     if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'yellow'): 
      arrow_direction = ("up") 

     if canvas.itemconfig(arrow, "fill") == ('fill', '', '', '', 'green'): 
      arrow_direction = ("down") 

    if start == True: 
     canvas.move(player, 0, [pms]) 
     #window.update() 
     #sleep(0.0001) 
     playerc = canvas.coords(player) 
     arrowc = canvas.coords(arrow) 

     if playerc == arrowc: 
      start = False 
      start2 = True 

    if arrow_direction == ("right"): 
     canvas.move(player, [pms], 0) 
     #window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("left"): 
     canvas.move(player, [-pms], 0) 
     #window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("up"): 
     canvas.move(player, 0, [-pms]) 
     #window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

    if arrow_direction == ("down"): 
     canvas.move(player, 0, [pms]) 
     #window.update() 
     #sleep(0.01) 
     playerc = canvas.coords(player) 
     finishc = canvas.coords(finish) 

     if playerc == finishc: 
      print ("Finished") 
      break 

window.mainloop() 
+1

你应该看看[问]和[MCVE] – pvg

+0

啊,我怎么能做一个代码块没有在每行添加4个空格? – HelpMe

+1

对于代码块,您可以粘贴您的代码,然后突出显示代码,然后按下看起来像'{}'或压力'ctrl + k'的按钮,这会将所有内容都移动到代码块中。 –

回答

0

为了在问候你的说法的一些信息:

我发现全局变量可以帮助,但我不知道如何使用它们

下面是一个简单的例子,说明如何使用全局变量n一个函数内部的ame空间。

我们需要在需要使用全局变量的每个函数内部使用global标识符。

some_var = "test" 
some_var2 = "test2" 

def change_global_var(): 
    global some_var, some_var2 # any variable names go here separated by a comma 
    some_var = "Test Complete" 
    some_var2 = "Test Complete" 

change_global_var() 

print(some_var, some_var2) 

为你下一个问题:

代码甚至不反应,我的“空间按钮”

的问题与你有一个启动功能命名的事实和一个变量。这不是一个好主意。此外,如果函数不是局部变量,则需要告诉函数在何处查找变量start。而应该更改功能:

def start(event): 
    start = True 
    print ("start") 

要:

# can be any function name just don't use names you have already used. 
def change_start(event): 

    global start # tells the function that start is in the global namespace 
    start = True 
    print ("start") 

UPDATE:

一个用结合和帆布问题结合将无法在绘制对象工作,除非绑定是鼠标单击。它与focus不适用于绘制对象。因此,您需要将空格键绑定到根窗口。或者如果使用框架,画布所在的框架将会起作用。

变化:

canvas.bind('<space>', change_start) 

要:

window.bind('<space>', change_start) 

这应该与空格键解决您的问题。

+0

仍然没有工作,我试过了,有很多人说,你应该使用全局变量(我不知道为什么)你能解释这一点给我吗?而thx – HelpMe

+0

@HelpMe编写一个程序时,有时需要使用全局,而不使用类,某些种类的全局变量很好。这是一个关于全局变量的良好答案的链接,以及为什么它们被认为是不好的。 [为什么全局变量是邪恶的?](https://stackoverflow.com/questions/19158339/why-are-global-variables-evil) –

+0

@HelpMe,你究竟做了什么。你是否改变了我提到的所有内容或仅改变了全局变量? –