问题描述
这是为我的编程项目准备的,在尝试使我的代码执行我想做的事情时遇到了困难(可能是因为我从未使用过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 (将#修改为@)