鱼C论坛

 找回密码
 立即注册
查看: 922|回复: 78

[作品展示] 【pygameGUI更新日志】来啦!滑条组件,喜欢吗?

[复制链接]
发表于 2024-2-14 19:22:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 cjjJasonchen 于 2024-2-14 21:10 编辑

Scrollbar —— 滑条


许久不见,想我否

这次更新我带来了滑条哦~




本期demo展示与解读

demo

demo

(这是播放音频的例子,上次说的圆角矩形也做了一个例子)

这些各种形状的边框,突起、凹陷。。。。。之类的效果在正式版发布后会陆续更新,以下是源码

上方gif动图笑点解析:
| 滑条的滑块在拖动时可以展示百分比(在使用时用label添加的功能,非滑条自带
| 播放与暂停键采用了最新的 switch ——开关组件,支持帧动画(这里使用了渐变效果,在使用时使用Player添加的动画效果,非 switch 自带
| 滑条左右两边的 ”-“ ”+“ (后续使用Button添加的,点击可移动滑块,非滑条自带
| 音乐是”打飞机
| 下方简介区滚动鼠标滚轮便可上下滑动,无需拖动滑块(是在滑块的command中添加的,非滑条组件自带效果
| 简介展示框使用了上次@Twilight6同学要求的圆角矩形
        (使用的是pygame的draw方法,非frame自带很抱歉并没有达到你所说的效果
        我没有使用函数绘制出真正圆滑的圆角矩形,只是在四个角简单的画了个圆,
        如果要达到斜率平滑变化的圆角需要更复杂的算法





源码 新版demo3 —— 滑条.zip (406.16 KB, 下载次数: 11)






接下来是一些意见的征求
| 1、目前帧动画(之前那个软软弹弹的按钮效果)目前给他起的名字是“Player——播放器“,想问问各位这样是否妥当,是否应该修改为”animation——动画“

| 2、”switch——开关“组件,目前的属性、变量名似乎也有所不妥,见下方代码:

  1. def __init__(self,
  2.                  group=None, # 加入到哪个Group中,该组件通常是Frame
  3.                  pos = [0,0],size=[100,50], # 位置、大小
  4.                  active_textures = [(240,240,240),], # 接受一个元组/列表或函数,代表按钮上的图案
  5.                  init_textures = [(250,250,250),], # 接受一个元组/列表或函数,代表按钮上的图案
  6.                  down_textures = [(230,230,230),], # 接受一个元组/列表或函数,代表按钮上的图案
  7.                  block = True, # 当鼠标位于上方时是否打开阻断
  8.                  unblock=False, # 是否免疫阻断
  9.                  mouse_button = 1, # 响应哪个按钮
  10.                  down_command = [None,], # 当按钮被点击时调用(按下时)
  11.                  command = [None,], # 当按钮被点击时调用(抬起时)
  12.                  active_command = [None,], # 当按钮处于鼠标下方时,反复调用
  13.                  repeat=-1, # 长按时按照多少帧的间隔调用command
  14.                  ):
复制代码


        active_textures——活动纹理、 init_textures——初始纹理、down_textures——按下纹理
        之前这些名字在按钮和滑块中全部是没有”s“ 的,接受的是单个函数或者图片对象
        现在这些参数接受的全是列表或者是元组。。。

        但是,down_command = [None,], command = [None,],active_command = [None,],这三个参数接受的同样也变成了列表和元组,我却没有加s,是否需要修改?

个人认为全部没有s或许会更方便些,所以就没改,留到发日志的时候和大伙探讨一下

| 3、目前pygameGUI的主要了理念是:尽可能的提高自由度,减少繁杂的操作
        (相比tkinter,他会更复杂却不难以使用,但成品的美观程度会远远超越tkinter,
                所以,我希望各位在使用时看着我写的教程或者注释,而不是把它背下来

        我希望使用者可以自己写组件,但是由于我在之前写代码的时候似乎使用了过多的私有变量
        以至于继承变得很低效,使用者自己写组件时似乎只能继承”widget“也就是组件基类,而不能继承”Button“、”Frame“之类的已经做好的组件
        (这些私有变量是比较有用的,在各位修改实例化组件的属性时,可以大幅度减少bug和使用者的代码行数
                例如:frame.image = xxxxxxx
                如果把私有变量删掉,后面还要再加一句
                        frame.image = xxxx
                        frame.rect = frame.image.get_rect()
                如果有私有变量的话,多出来的这些我就可以使其在修改属性时自动执行

以上,此次开发日志汇报完毕!请各位鱼油认真检阅!希望pygameGUI早日完成,有机会开源到pypi!

接下来的目标主要是做输入框啦~加油!


求评论,请勿评分!!!



评分

参与人数 9荣誉 +35 鱼币 +12 贡献 +23 收起 理由
开心老六 + 3 + 2 + 3 感谢楼主无私奉献!
Mike_python小 + 8 + 2 + 5
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^
python爱好者. + 5 + 3 + 3 鱼C有你更精彩^_^
某一个“天” + 1 + 1 加油加油
zhangchenyvn + 5 + 3 好帖,必评分!
Quick_Sort + 1 + 1 不评分是不可能的
liuhongrun2022 + 5 + 3
歌者文明清理员 + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-2-14 19:27:13 | 显示全部楼层
@小甲鱼 @不二如是 @学习编程中的Ben @liuhongrun2022 @中英文泡椒 @歌者文明清理员 @陶远航 @小甲鱼 @Mike_python小 @python爱好者. @zhangjinxuan @陶远航
@琅琊王朝 @中英文泡椒 @Ewan-Ahiouy

【pygameGUI 更新日志】我更新了新的内容 Scrollbar——滑条组件 快来看看吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 19:38:02 | 显示全部楼层
加不加s应该取决于传来的参数是iterable or no

评分

参与人数 1鱼币 +5 收起 理由
cjjJasonchen + 5 我也是这么认为的

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 19:39:46 | 显示全部楼层
歌者文明清理员 发表于 2024-2-14 19:38
加不加s应该取决于传来的参数是iterable or no

收到,感谢你的意见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 19:58:05 | 显示全部楼层
不错

评分

参与人数 1鱼币 +5 收起 理由
cjjJasonchen + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-2-14 19:59:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:12:13 | 显示全部楼层
太牛了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:12:17 | 显示全部楼层
  1. def __init__(self,
  2.                  group=None, # 加入到哪个Group中,该组件通常是Frame
  3.                  pos = [0,0],size=[100,50], # 位置、大小
  4.                  active_textures = [(240,240,240),], # 接受一个元组/列表或函数,代表按钮上的图案
  5.                  init_textures = [(250,250,250),], # 接受一个元组/列表或函数,代表按钮上的图案
  6.                  down_textures = [(230,230,230),], # 接受一个元组/列表或函数,代表按钮上的图案
  7.                  block = True, # 当鼠标位于上方时是否打开阻断
  8.                  unblock=False, # 是否免疫阻断
  9.                  mouse_button = 1, # 响应哪个按钮
  10.                  down_command = [None,], # 当按钮被点击时调用(按下时)
  11.                  command = [None,], # 当按钮被点击时调用(抬起时)
  12.                  active_command = [None,], # 当按钮处于鼠标下方时,反复调用
  13.                  repeat=-1, # 长按时按照多少帧的间隔调用command
  14.                  ):
复制代码

函数不要放那么多形参,设置的参数用元组传递,或者用打包传参。元组名字就叫
  1. sittingsgrp
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:15:07 | 显示全部楼层
zhangchenyvn 发表于 2024-2-14 20:12
函数不要放那么多形参,设置的参数用元组传递,或者用打包传参。元组名字就叫

你是说用 ”*“ 和 ”**“ ?
然后具体哪些参数写在注释里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:17:08 | 显示全部楼层
cjjJasonchen 发表于 2024-2-14 20:15
你是说用 ”*“ 和 ”**“ ?
然后具体哪些参数写在注释里?

对。建议不要改成打包传参,元组传参更好一点。因为元组名能够体现参数作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:19:31 | 显示全部楼层
  1. def __init__(self, sittingsgrp):
  2.         xxx = sittingsgrp[0]
  3.         yyy = sittingsgrp[1]
  4.         ……
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:21:01 | 显示全部楼层

这样的话”sittingsgrp“是不是还要按照一定顺序?如果顺序混论,或者我希望少输入几个参数应该怎么办呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:25:16 | 显示全部楼层
cjjJasonchen 发表于 2024-2-14 20:21
这样的话”sittingsgrp“是不是还要按照一定顺序?如果顺序混论,或者我希望少输入几个参数应该怎么办呢 ...

这就是简洁传参的局限性。。。顺序一定要有。省参数用:sittingsgrp[a] = None,后面要写一下
  1. if sittingsgrp[0] == None:
  2.         ……
  3. elif sittingsgrp[1] == None:
  4.         ……
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:29:30 | 显示全部楼层
另外,输入框如果要中文可以尝试用一本书,例如《三体》,然后用 xpinyin 提取字的拼音,在输入拼音时显示字

我之前做过,是另外项目的,但删了(可见我真没啥耐心…)

三体可以去网上找免费下载的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:29:37 | 显示全部楼层
zhangchenyvn 发表于 2024-2-14 20:25
这就是简洁传参的局限性。。。顺序一定要有。省参数用:sittingsgrp[a] = None,后面要写一下


如果这样的话我就不太愿意使用打包传参了,因为在实例化时,会有很多很多的参数无需输入,只需使用默认值即可,而且如果输入错误了,报错也很方便。

而且由于参数过多,按照顺序输入看似美观,但似乎太长了,很多时候我们只需要两三个参数,其他的会在后续使用函数设定的方式进行修改,例如 ”位置“,”纹理“,”回调函数“ 之类的。

使用打包传参似乎并没有显得简洁,反而更复杂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:30:57 | 显示全部楼层
歌者文明清理员 发表于 2024-2-14 20:29
另外,输入框如果要中文可以尝试用一本书,例如《三体》,然后用 xpinyin 提取字的拼音,在输入拼音时显示 ...

不需要,现在的版本已经支持了,我之前有做过demo,可以直接使用输入法了,只需要使用os组件复制一份输入法的图片贴上去就好啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:31:22 | 显示全部楼层
cjjJasonchen 发表于 2024-2-14 20:29
如果这样的话我就不太愿意使用打包传参了,因为在实例化时,会有很多很多的参数无需输入,只需使用默认 ...

对对对,其实,我比较喜欢单独写
  1. def getinputs():
  2.         Xxxx
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-14 20:32:15 | 显示全部楼层
你系哪里人?我想找一下老乡。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:32:17 | 显示全部楼层
歌者文明清理员 发表于 2024-2-14 20:29
另外,输入框如果要中文可以尝试用一本书,例如《三体》,然后用 xpinyin 提取字的拼音,在输入拼音时显示 ...

如果你有需要的话我去找一找,提前把上次做的demo发出来给大家看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-14 20:32:47 | 显示全部楼层
zhangchenyvn 发表于 2024-2-14 20:32
你系哪里人?我想找一下老乡。

上海的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表