繁体   English   中英

如何制作切换按钮

[英]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是多余的。

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

这里有两个选项:

1:boolean开关

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))

2:将填充值设置为切换

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_changeTrue则设置为True ,如果bg_changeFalse则设置为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM