[英]How to make a toggle button
我正在尝试制作一个程序,当我按下空格键时将背景颜色从黑色切换为白色。
有谁知道我的代码有什么问题:
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(255,255,255)
中添加了三个不同的参数而不是元组。
您可以通过添加另一层括号来解决此问题,如下所示: screen.fill((255,255,255))
。
if 语句应如下所示:
if bg_change:
screen.fill((255,255,255))
else:
screen.fill((0, 0, 0))
编辑:正如@JoeFerndz 提到的,您还应该将if bg_change == True
更改为 just if bg_change
因为添加== True
是多余的。
您可以使用基本切换开关来更改值。
这里有两个选项:
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:
bg_change = not bg_change
if bg_change:
screen.fill((255,255,255))
else:
screen.fill((0, 0, 0))
t = 255 ^ 0
x = 0
x ^= t #x is set to 255 first. If you want to start with 0, comment this line
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:
x ^= t
screen.fill((x,x,x))
这是它的工作原理:
>>> t = 255 ^ 0
>>> x ^= t
>>> x
255
>>> x ^= t
>>> x
0
>>> x ^= t
>>> x
255
每次您必须切换时,该值都会自动切换。 因此,您不必担心拨动开关。 您正在使用 x 的值进行切换。
有关切换的更多选项,请参阅@Raymond Hettinger 在帖子如何切换Python 中的令人印象深刻的解决方案
错误在于:
if bg_change: bg_change = True else: bg_change = False
这段代码实际上并没有做任何事情。 如果bg_change
为True
则设置为True
,如果bg_change
为False
则设置为False
。 你真正想做的是:
if event.key == pygame.K_SPACE:
if bg_change:
bg_change = False
else:
bg_change = True
您可以使用not
运算符简化代码。 not
反转(切换) Boolean 变量:
if event.key == pygame.K_SPACE:
bg_change = not bg_change
fill
有一个参数,它可以是具有 RGB 颜色值的元组:
screen.fill(255,255,255)
screen.fill((255, 255, 255))
完整代码:
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:
bg_change = not bg_change
if bg_change == True:
screen.fill((255,255,255))
else:
screen.fill((0, 0, 0))
pygame.display.update()
clock.tick(60)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.