cjjJasonchen 发表于 2024-2-14 19:22:03

【pygameGUI更新日志】来啦!滑条组件,喜欢吗?

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

Scrollbar —— 滑条

许久不见,想我否?{:10_278:}

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



本期demo展示与解读


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

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

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




源码:





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

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

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

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

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

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

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

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

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

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


求评论,请勿评分!!!


cjjJasonchen 发表于 2024-2-14 19:27:13

@小甲鱼 @不二如是 @学习编程中的Ben @liuhongrun2022 @中英文泡椒 @歌者文明清理员 @陶远航 @小甲鱼 @Mike_python小 @python爱好者. @zhangjinxuan @陶远航
@琅琊王朝 @中英文泡椒 @Ewan-Ahiouy

【pygameGUI 更新日志】我更新了新的内容 Scrollbar——滑条组件 快来看看吧~

歌者文明清理员 发表于 2024-2-14 19:38:02

加不加s应该取决于传来的参数是iterable or no

cjjJasonchen 发表于 2024-2-14 19:39:46

歌者文明清理员 发表于 2024-2-14 19:38
加不加s应该取决于传来的参数是iterable or no

收到,感谢你的意见{:10_275:}

liuhongrun2022 发表于 2024-2-14 19:58:05

不错{:5_106:}

cjjJasonchen 发表于 2024-2-14 19:59:35

liuhongrun2022 发表于 2024-2-14 19:58
不错

感谢回复!{:10_340:}

Quick_Sort 发表于 2024-2-14 20:12:13

太牛了!

zhangchenyvn 发表于 2024-2-14 20:12:17

def __init__(self,
               group=None, # 加入到哪个Group中,该组件通常是Frame
               pos = ,size=, # 位置、大小
               active_textures = [(240,240,240),], # 接受一个元组/列表或函数,代表按钮上的图案
               init_textures = [(250,250,250),], # 接受一个元组/列表或函数,代表按钮上的图案
               down_textures = [(230,230,230),], # 接受一个元组/列表或函数,代表按钮上的图案
               block = True, # 当鼠标位于上方时是否打开阻断
               unblock=False, # 是否免疫阻断
               mouse_button = 1, # 响应哪个按钮
               down_command = , # 当按钮被点击时调用(按下时)
               command = , # 当按钮被点击时调用(抬起时)
               active_command = , # 当按钮处于鼠标下方时,反复调用
               repeat=-1, # 长按时按照多少帧的间隔调用command
               ):
函数不要放那么多形参,设置的参数用元组传递,或者用打包传参。元组名字就叫sittingsgrp

cjjJasonchen 发表于 2024-2-14 20:15:07

zhangchenyvn 发表于 2024-2-14 20:12
函数不要放那么多形参,设置的参数用元组传递,或者用打包传参。元组名字就叫

你是说用 ”*“ 和 ”**“ ?
然后具体哪些参数写在注释里?

zhangchenyvn 发表于 2024-2-14 20:17:08

cjjJasonchen 发表于 2024-2-14 20:15
你是说用 ”*“ 和 ”**“ ?
然后具体哪些参数写在注释里?

对。建议不要改成打包传参,元组传参更好一点。因为元组名能够体现参数作用。

zhangchenyvn 发表于 2024-2-14 20:19:31

def __init__(self, sittingsgrp):
      xxx = sittingsgrp
      yyy = sittingsgrp
      ……

cjjJasonchen 发表于 2024-2-14 20:21:01

zhangchenyvn 发表于 2024-2-14 20:19


这样的话”sittingsgrp“是不是还要按照一定顺序?如果顺序混论,或者我希望少输入几个参数应该怎么办呢?{:10_272:}

zhangchenyvn 发表于 2024-2-14 20:25:16

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

这就是简洁传参的局限性。。。顺序一定要有。省参数用:sittingsgrp = None,后面要写一下
if sittingsgrp == None:
      ……
elif sittingsgrp == None:
      ……

歌者文明清理员 发表于 2024-2-14 20:29:30

另外,输入框如果要中文可以尝试用一本书,例如《三体》,然后用 xpinyin 提取字的拼音,在输入拼音时显示字

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

三体可以去网上找免费下载的东西

cjjJasonchen 发表于 2024-2-14 20:29:37

zhangchenyvn 发表于 2024-2-14 20:25
这就是简洁传参的局限性。。。顺序一定要有。省参数用:sittingsgrp = None,后面要写一下

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

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

使用打包传参似乎并没有显得简洁,反而更复杂了{:10_266:}

cjjJasonchen 发表于 2024-2-14 20:30:57

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

不需要,现在的版本已经支持了,我之前有做过demo,可以直接使用输入法了,只需要使用os组件复制一份输入法的图片贴上去就好啦~{:10_279:}

zhangchenyvn 发表于 2024-2-14 20:31:22

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

对对对,其实,我比较喜欢单独写def getinputs():
      Xxxx

zhangchenyvn 发表于 2024-2-14 20:32:15

你系哪里人?我想找一下老乡。

cjjJasonchen 发表于 2024-2-14 20:32:17

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

如果你有需要的话我去找一找,提前把上次做的demo发出来给大家看看

cjjJasonchen 发表于 2024-2-14 20:32:47

zhangchenyvn 发表于 2024-2-14 20:32
你系哪里人?我想找一下老乡。

上海的
页: [1] 2 3 4
查看完整版本: 【pygameGUI更新日志】来啦!滑条组件,喜欢吗?