Pygame-将当前屏幕上的内容更改为另一个的按钮

问题描述

这是为我的编程项目准备的,在尝试使我的代码执行我想做的事情时遇到了困难(可能是因为我从未使用过pygame或任何GUI工具)。基本上,对于我的项目,我想创建一个名为“ Logic Gate Simulator”的程序,用户可以从屏幕侧面拖动逻辑门并将其放置在画布中以创建电路,现在我开始对其进行编码,即太难了。所以现在我的计划是添加逻辑门的图像,一旦用户单击按钮,它将显示真值表或显示所单击的逻辑门的输出

我使用pygame-menu为此创建了主菜单,我在网上找到了代码并对其进行了调整,但不幸的是,代码无处不在,并且没有使用我期望的功能。有人可以尝试解释并演示如何制作一个按钮,使该按钮在单击时显示真值表或在其上显示文本。

我已经尽力清理代码,但是当我仔细检查所有代码时,我的头就开始受伤了。(忽略某人的注释大部分都是胡扯)

import sys

sys.path.insert(0,'../../')

import os
import pygame
import pygame_menu


# -----------------------------------------------------------------------------
# Constants and global variables
# -----------------------------------------------------------------------------
FPS = 60.0
WINDOW_SIZE = (800,600)

sound = None  # type: pygame_menu.sound.sound
surface = None  # type: pygame.Surface
main_menu = None  # type: pygame_menu.Menu


# -----------------------------------------------------------------------------
# Methods
# -----------------------------------------------------------------------------
def main_background():
    """
    Background color of the main menu,on this function user can plot
    images,play sounds,etc.

    :return: None
    """
    surface.fill((40,40,40))


def check_name_test(value):
    """
    This function tests the text input widget.

    :param value: The widget value
    :type value: str
    :return: None
    """
    print('User name: {0}'.format(value))


# noinspection PyUnusedLocal
def update_menu_sound(value,enabled):
    """
    Update menu sound.

    :param value: Value of the selector (Label and index)
    :type value: tuple
    :param enabled: Parameter of the selector,(True/False)
    :type enabled: bool
    :return: None
    """
    if enabled:
        main_menu.set_sound(sound,recursive=True)
        print('Menu sounds were enabled')
    else:
        main_menu.set_sound(None,recursive=True)
        print('Menu sounds were disabled')

def main(test=False):
    """
    Main program.

    :param test: Indicate function is being tested
    :type test: bool
    :return: None
    """

    # -------------------------------------------------------------------------
    # Globals
    # -------------------------------------------------------------------------
    global main_menu
    global sound
    global surface

    # -------------------------------------------------------------------------
    # Init pygame
    # -------------------------------------------------------------------------
    pygame.init()
    os.environ['SDL_VIDEO_CENTERED'] = '1'

    # Create pygame screen and objects
    surface = pygame.display.set_mode(WINDOW_SIZE)
    pygame.display.set_caption('Logic Gate Simulator')
    clock = pygame.time.Clock()

    # -------------------------------------------------------------------------
    # Set sounds
    # -------------------------------------------------------------------------
    sound = pygame_menu.sound.sound()

    # Load example sounds
    sound.load_example_sounds()

    # disable a sound
    sound.set_sound(pygame_menu.sound.soUND_TYPE_ERROR,None)

    # -------------------------------------------------------------------------
    # Create menus: Settings/Options
    # -------------------------------------------------------------------------
    settings_menu_theme = pygame_menu.themes.THEME_DARK.copy()
    settings_menu_theme.title_offset = (5,-2)
    settings_menu_theme.widget_alignment = pygame_menu.locals.ALIGN_LEFT
    settings_menu_theme.widget_font = pygame_menu.font.FONT_OPEN_SANS_LIGHT
    settings_menu_theme.widget_font_size = 20

    settings_menu = pygame_menu.Menu(
        height=600,width=800,onclose=pygame_menu.events.disABLE_CLOSE,theme=settings_menu_theme,title='Settings'
    )
    settings_menu.add_button('Return to main menu',pygame_menu.events.BACK,align=pygame_menu.locals.ALIGN_CENTER)
                                        

    #mode selector
    #logic gate
    logic_menu_theme = pygame_menu.themes.THEME_DARK.copy()
    logic_menu_theme.title_offset = (5,-2)
    logic_menu_theme.widget_alignment = pygame_menu.locals.ALIGN_LEFT
    logic_menu_theme.widget_font = pygame_menu.font.FONT_OPEN_SANS_LIGHT
    logic_menu_theme.widget_font_size = 20

    logic_menu = pygame_menu.Menu(
    height=600,theme=logic_menu_theme,title='Logic Gates',columns = 3,rows = 3
)
    logic_menu.add_image("and.png",scale=(0.25,0.25),scale_smooth=True,align=pygame_menu.locals.ALIGN_LEFT)
    #logic_menu.add_button("AND",AND(),align=pygame_menu.locals.ALIGN_LEFT)
    #logic_menu.add_vertical_margin(1)
    #logic_menu.add_vertical_margin(100)
    #find better or image
    logic_menu.add_image("or.png",scale=(0.65,0.65),align=pygame_menu.locals.ALIGN_LEFT)
    #logic_menu.add_vertical_margin(1)
    #logic_menu.add_vertical_margin(100)
    logic_menu.add_image("not.png",align=pygame_menu.locals.ALIGN_LEFT)
    logic_menu.add_image("nor.png",scale=(0.15,0.15),align=pygame_menu.locals.ALIGN_CENTER)
    logic_menu.add_image("exnor.png",align=pygame_menu.locals.ALIGN_CENTER)
    logic_menu.add_image("nand.png",align=pygame_menu.locals.ALIGN_CENTER)
    logic_menu.add_button('Back',align=pygame_menu.locals.ALIGN_RIGHT)
    
    

#update use def
    
    #karnough maps porb spelled it wrong
    #help
    help_menu_theme = pygame_menu.themes.THEME_DARK.copy()
    help_menu_theme.title_offset = (5,-2)
    help_menu_theme.widget_alignment = pygame_menu.locals.ALIGN_LEFT
    help_menu_theme.widget_font = pygame_menu.font.FONT_OPEN_SANS_LIGHT
    help_menu_theme.widget_font_size = 20

    help_menu = pygame_menu.Menu(
        height=600,theme=help_menu_theme,title='Help'
    )
    #add text
    font = pygame.font.SysFont("comicsansms",72)
    text = font.render("",True,(0,128,0))
    
    help_menu.add_button('Return to main menu',align=pygame_menu.locals.ALIGN_CENTER)


    # -------------------------------------------------------------------------
    # Create menus: Main menu
    # -------------------------------------------------------------------------
    main_menu_theme = pygame_menu.themes.THEME_DARK.copy()
    main_menu_theme.widget_offset = (0,0.09)
    main_menu_theme.title_font = pygame_menu.font.FONT_COMIC_NEUE
    main_menu_theme.widget_font = pygame_menu.font.FONT_COMIC_NEUE
    main_menu_theme.widget_font_size = 30

    main_menu = pygame_menu.Menu(
        height=600,onclose=pygame_menu.events.EXIT,# User press ESC button
        title='Main menu',theme=main_menu_theme,)

    #menu.add_selector('Modes :',[('Logic Gates',1),('Karnaugh Maps',2)],onchange=set_mode)
    main_menu.add_button('Logic Gates',logic_menu)
    main_menu.add_button("Help",help_menu)
    main_menu.add_button('Settings',settings_menu)
    main_menu.add_selector('Menu sounds ',[('Off',False),('On',True)],onchange=update_menu_sound)
    main_menu.add_button('Quit',pygame_menu.events.EXIT)

    # -------------------------------------------------------------------------
    # Main loop
    # -------------------------------------------------------------------------
    while True:

        # Tick
        clock.tick(FPS)

        # Paint background
        main_background()

        # Main menu
        main_menu.mainloop(surface,main_background,disable_loop=test,fps_limit=FPS)

        # Flip surface
        pygame.display.flip()

        # At first loop returns
        if test:
            break


if __name__ == '__main__':
    main()

这是代码,我尝试创建一个def函数,以便当我单击它时,它可以执行该函数内部的功能,但是它从未起作用,所以我删除了该功能

#logic_menu.add_button("AND",align=pygame_menu.locals.ALIGN_LEFT)

请忽略“ AND()”,我早些时候创建了一个def,但从未成功。那就是试图找到解决方案的代码

感谢您的阅读,并度过了美好的一天/夜晚。

https://i.stack.imgur.com/PGLKC.png https://i.stack.imgur.com/DjS9k.png https://i.stack.imgur.com/bO0dF.png

对不起,我找不到添加更多图像的方法:(

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)