在pygame中实现菜单,支持鼠标和键盘操作

python中的pygame库,并没有传统菜单功能,正好手边有一项目,需要在pygame中实现菜单功能。目前,项目已经完成,将其中实现菜单功能的约400行代码摘取出来,供大家参考。

在pygame中实现菜单,支持鼠标和键盘操作

可以按定义的空格键改变主题,为简化,只定义了2个主题,即一黑一白:

在pygame中实现菜单,支持鼠标和键盘操作

执行功能后的样式,只定义了一个随机绘制圆的小程序,其它均用print()提示:

在pygame中实现菜单,支持鼠标和键盘操作

现在提交代码,程序用到的库有:

from sys import  exit
import pygame
from pygame.locals import *
from random import randint
from math import floor

定义一个class:

class mymenu(object):     # 在pygame中定义菜单,支持鼠标和键盘操作

主程序定义了几个全局变量,对一些基本量进行定义,比如菜单栏的高度、状态栏的高度、颜色等,方便使用者修改,许多变量用中文了,我觉得用中文当做变量或过程名称,可以少写许多中文注释,所以有些地方就直接用中文了。

主程序 ===========================
def main(NoWelcom=False):
    global screen_w,screen_h,底部状态栏高度 , 菜单栏高度 , screen,菜单 ,字体,背景颜色
    pygame.init()
    pygame.display.set_caption('Pygame菜单演示')
    字体='simsun'
    底部状态栏高度 = 22
    菜单栏高度 = 22
    背景颜色 = (255,255,255)
    改变窗口大小((1000, 800),RESIZABLE)
    菜单=mymenu() # 初始化顶部菜单

菜单项全部定义成了变量,如果需要的话,可以自己改为传递参数也行,菜单分隔项,用 ‘-‘号表示,菜单项的宽度根据字体大小和文字多少自动调整。演示中定义的变量如下:

    def __init__(self):
        self.menu_height=菜单栏高度
        self.sub_top_height=12                   # 子菜单第一行上边保留空间
        self.default_fontsize=16                 # 菜单初始字体大小
        self.mainfontsize=self.default_fontsize  # 主菜单字体大小
        self.subfontsize =self.default_fontsize  # 子菜单字体大小 当菜单高度大于窗口高度时,字体会自动缩小,以适应窗口
        self.menus    =[ '文件(F)','直角坐标函数展示(R)','极坐标函数展示(P)','功能(S)','趣味(Q)','帮助(H)'] # 第一级菜单 即主菜单
        self.submenus =[['新建...       Ctrl+N','修改...','-','打开文件...   Ctrl+O','保存到文件... Ctrl+S','保存图片... ','-','打开内置函数...','-','退出          Alt+F4'],
                        ['圆','椭圆','抛物线','正弦曲线','正切曲线','两个方程求共解','-','锯齿波','方波','-','笑脸','美之心(纹)','五星红旗'],
                        ['阿基米德螺线','伯努利双扭线','笛卡尔心形线','-','回旋','绳结','花心','-','模拟表盘','扫描','绚丽图形','头结','蝴蝶曲线'],
                        ['改变菜单主题     空格','-','坐标系...          F9','-','绘图方式...      1234','画笔颜色...       F10','-','切换背景图片       F6','图例设置...','-','屏幕大小...       F12','-','更多设置...'],
                        ['天体运行模拟系统','导弹模拟系统','宇宙大爆炸模拟系统','-','三体游戏','魂斗罗游戏','-','屏幕爬虫','彩虹漩涡','飘雪'],
                        ['操作说明   F1','软件说明','视频介绍','-','注册...','-','关于']]                   # 第二级菜单  其中的 '-' 为划一条分隔线 add_separator
        self.subcommand=[['新建.showTK("新建")','修改.showTK()','-','打开文件()','保存文件()','屏幕截图()','-','从内置函数挑选()','-','退出系统()'],
                        ['画圆()','椭圆','抛物线','正弦曲线','正切曲线','两个方程求共解','-','锯齿波','方波','-','笑脸','美之心(纹)','五星红旗'],
                        ['阿基米德螺线','伯努利双扭线','笛卡尔心形线','-','回旋','绳结','花心','-','模拟表盘','扫描','绚丽图形','头结','蝴蝶曲线'],
                        ['改变菜单主题()','-','选择坐标系()','-','绘图方式()','画笔颜色设置()','-','背景图片集.切换()','图例.图例设置()','-','调整屏幕大小()','-','调整相关变量()'],
                        ['天体运行模拟系统()','导弹轨迹()','宇宙大爆炸()','-','三体()','魂斗罗()','-','屏幕爬虫()','彩虹漩涡()','飘雪()'],
                        ['操作说明(1)','软件说明()','播放视频()','-','注册()','-','关于()']]                # 点选后需要执行的命令

程序中主题的实现,实际就是一些颜色的定义,本演示只简单用了两种主题:

    def menu_colors(self):
        if 背景颜色==(255,255,255):
            self.fgcolor=(232,232,232)              # 前景色
            self.bgcolor=(33,34,35)                 # 背景色
            self.activefgcolor=(68,68,68)           # 鼠标在其上时字体显示的颜色
            self.activebgcolor=(132,188,230)        # 鼠标在其上时背景显示的颜色
            self.submenu_bg_color=(70,70,70)        # 二级菜单的背景颜色
            self.submenu_border_color=(2,2,2)       # 二级菜单边沿处颜色
        else:
            self.fgcolor=(68,68,68)                 # 字体颜色
            self.bgcolor=(251,252,253)              # 主菜单背景颜色
            self.activefgcolor=(68,68,68)           # 鼠标在其上时字体颜色
            self.activebgcolor=(168,210,253)        # 鼠标在其上时背景颜色
            self.submenu_bg_color=(251,252,253)     # 二级菜单的背景颜色
            self.submenu_border_color=(220,221,222) # 二级菜单边沿处颜色

鼠标和键盘,用 p

Original: https://blog.csdn.net/weixin_69832035/article/details/127751933
Author: 刘庆豪2007
Title: 在pygame中实现菜单,支持鼠标和键盘操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779007/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球