Python 如何制作切换按钮

Python 如何制作切换按钮,python,pygame,Python,Pygame,我试图制作一个程序,当我按下空格键时,将背景颜色从黑色切换到白色 有人知道我的代码有什么问题吗: import pygame, sys clock = pygame.time.Clock() wn_size = (800, 600) pygame.init() screen = pygame.display.set_mode(wn_size) bg_change = False running = True while running: for event in pygame.

我试图制作一个程序,当我按下空格键时,将背景颜色从黑色切换到白色

有人知道我的代码有什么问题吗:

import pygame, sys

clock = pygame.time.Clock()
wn_size = (800, 600)
pygame.init()

screen = pygame.display.set_mode(wn_size)

bg_change = False

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                if bg_change:
                    bg_change = True
                else:
                    bg_change = False

    if bg_change == True:
        screen.fill(255,255,255)
    else:
        screen.fill((0, 0, 0))

    pygame.display.update()
    clock.tick(60)

似乎您在
screen.fill(255255255)
中添加了三个不同的参数而不是元组

只需添加另一层括号即可解决此问题,如:
screen.fill((255255255))

if语句应如下所示:

    if bg_change:
        screen.fill((255,255,255))
    else:
        screen.fill((0, 0, 0))

编辑:正如@JoeFerndz所提到的,如果bg_change==True,您也应该将
更改为
如果bg_change
,因为添加
==True
是多余的。

似乎您在
屏幕中添加了三个不同的参数而不是元组。fill(255255)

只需添加另一层括号即可解决此问题,如:
screen.fill((255255255))

if语句应如下所示:

    if bg_change:
        screen.fill((255,255,255))
    else:
        screen.fill((0, 0, 0))

编辑:正如@JoeFerndz所提到的,如果bg_change==True,您也应该将
更改为如果bg_change
,因为添加
==True
是多余的。

您可以使用基本切换开关来更改值

这里有两个选项:

1:布尔开关 2:将填充值设置为切换 下面是它的工作原理:

>>> t = 255 ^ 0
>>> x ^= t
>>> x
255
>>> x ^= t
>>> x
0
>>> x ^= t
>>> x
255
每次必须切换时,该值都会自动切换。因此,您不必担心切换开关。您正在使用x值进行切换


有关切换的更多选项,请参阅@Raymond Hettinger在文章中编写的令人印象深刻的解决方案。您可以使用基本切换开关更改值

这里有两个选项:

1:布尔开关 2:将填充值设置为切换 下面是它的工作原理:

>>> t = 255 ^ 0
>>> x ^= t
>>> x
255
>>> x ^= t
>>> x
0
>>> x ^= t
>>> x
255
每次必须切换时,该值都会自动切换。因此,您不必担心切换开关。您正在使用x值进行切换


有关切换的更多选项,请参阅@Raymond Hettinger在文章中提出的令人印象深刻的解决方案。错误在于:

如果bg\u发生变化:
bg_change=True
其他:
bg_change=False
这段代码实际上什么都不做。如果
bg\u change
True
则设置为
True
,如果
bg\u change
False
则设置为
False
。你真正想做的是:

如果event.key==pygame.K_空间:
如果bg_发生变化:
bg_change=False
其他:
bg_change=True
您可以使用
not
操作符简化代码<代码>非
反转(切换)布尔变量:

如果event.key==pygame.K_空间:
bg_变更=不bg_变更

具有单个参数,可以是具有RGB颜色值的元组:

屏幕填充(255255)

screen.fill((255,255,255))

完整代码:

import pygame,sys
clock=pygame.time.clock()
wn_尺寸=(800600)
pygame.init()
screen=pygame.display.set_模式(wn_大小)
bg_change=False
运行=真
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
bg_变更=不bg_变更
如果bg_change==真:
屏幕填充((255255))
其他:
屏幕填充((0,0,0))
pygame.display.update()
时钟滴答(60)

错误在以下几行:

如果bg\u发生变化:
bg_change=True
其他:
bg_change=False
这段代码实际上什么都不做。如果
bg\u change
True
则设置为
True
,如果
bg\u change
False
则设置为
False
。你真正想做的是:

如果event.key==pygame.K_空间:
如果bg_发生变化:
bg_change=False
其他:
bg_change=True
您可以使用
not
操作符简化代码<代码>非反转(切换)布尔变量:

如果event.key==pygame.K_空间:
bg_变更=不bg_变更

具有单个参数,可以是具有RGB颜色值的元组:

屏幕填充(255255)

screen.fill((255,255,255))

完整代码:

import pygame,sys
clock=pygame.time.clock()
wn_尺寸=(800600)
pygame.init()
screen=pygame.display.set_模式(wn_大小)
bg_change=False
运行=真
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
bg_变更=不bg_变更
如果bg_change==真:
屏幕填充((255255))
其他:
屏幕填充((0,0,0))
pygame.display.update()
时钟滴答(60)

只要检查
如果bg_更改为与
==True
相同,我将立即编辑我的答案以包含该内容。谢谢你让我知道@Joeferndz只要检查一下
,如果bg_的变化与
==True
相同,那是真的,我现在就编辑我的答案,将其包括在内。谢谢你让我知道@joeferndz要切换开关,您不需要执行“if bg\u change:bg\u change=True else:bg\u change=False
”。相反,执行
bg\u change=Not bg\u change要切换开关,您不需要执行`如果bg\u change:bg\u change=True,否则:bg\u change=False
。相反,do
bg\u change=Not bg\u change
Not
不是Python。Python是case senitive。对不起,答案应该是
not
not
not
:)编辑的。谢谢你接电话。没想到我会在一句话中写出3:)使用
x
本身的值使切换重载变量的实用程序。如果您真的想要这样一个工具,我建议您编写一个
Toggle
类。
Not
不是Python。Python是case se