IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 第13天 | 25天学会wxPython,动态组件之按钮 -> 正文阅读

[移动开发]第13天 | 25天学会wxPython,动态组件之按钮

组件(widgets)是应用程序最基本的单元,常见的组件有标签、文本、按钮、选择框、滑动器等。wxPython的大多数组件继承于wx.Window类,而wx.Window类继承于EvtHandler,所以大多数组件具有绑定事件的功能。

程序员们常将和用户交互的组件称作动态组件,而将主要起到显示作用的组件称为静态组件,静态组件尽管也可以用Bind()方法绑定事件,但不会起到作用。无论是动态组件,还是静态组件,都会有如下几个参数:

parent:父组件对象, 如Panel、Frame对象;

id:组件id,为wx.ID_ANY (即-1)时,由程序自动分配;

pos:在窗口的位置,值为元组(x,y)或wx.Point(x, y),其中x为横坐标,y为纵坐标;

size:指定组件的宽高,值为元组(width, height)或wx.Size(width, height),其中width为宽度,height为高度;

name:字符串,组件的名称;

style:组件的对齐方法,可用|进行组合,默认的对齐方式是wx.ALIGN_LEFT | wx.ALIGN

_TOP,可选内容如下:

wx.ALIGN_LEFT: 左对齐;

wx.ALIGN_RIGHT: 右对齐;

wx.ALIGN_TOP:顶部对齐;

wx.ALIGN_BOTTOM:底部对齐;

wx.ALIGN_CENTER_VERTICAL:垂直居中对齐;


wx.ALIGN_CENTER_HORIZONTAL:水平居中对齐;

wx.ALIGN_CENTER:居中对齐(垂直和水平都对齐)。

13.1 动态组件

widgets的动态组件有10多个,有按钮wx.Button、复选框wx.CheckBox和列表框wx.ComboBox等等。如果只是一味地念”名词”,实在太无趣了,能用代码+注释的方式讲解组件,那才有点意思。

1. 控制按钮

可用wx.Butto创建文本按钮;用wx.BitmapButton创建位图按钮时,需要提供一个位图,而非一个标签;

用wx.ToggleButton创建一个开关按钮,当你按下时,它将一直保持被按下的状态,直到你再次敲击它;位图开关按钮BitmapToggleButton,一个有位图又可进行开关的按钮。

如果你想回避了本地系统窗口的组件,那你可以用完全由Python重新实现的窗口组件,它放在wx.lib库中,如通过wx.lib.buttons引入通用文本按钮(GenButton)。

通用按钮比本地按钮具有更好的跨平台的外观;对它的外观有更多的控制权,并且能改变属性,如3D斜面的宽度和颜色,而这对于本地组件可能是不允许的;通用按钮类允许特性的合并,如GenBitmapTextButton允许文本标签和位图进行组合,而本地按钮不行。

通用组件的用法和本地组件的用法是保持一致的,你可以根据实际需求进行选择。

程序清单:button.py

import wx
import wx.lib.buttons as buttons


# 继承Frame
class Button(wx.Frame):
    ID_Btn = 10000
    ID_ToggleBtn = 10001

    def __init__(self, *args, **kwargs):
        super(Button, self).__init__(*args, **kwargs)
        # 初始化窗口UI
        self.init_ui()

    def init_ui(self):
        # 面板
        panel = wx.Panel(self)
        # 文本按钮
        btn = wx.Button(panel, id=self.ID_Btn, label="通用按钮",
                        pos=(20, 20),size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.click, btn)
        # 位图按钮
        img_btn = wx.BitmapButton(panel, id=wx.ID_ANY, 
                                  bitmap=wx.Bitmap("exit.png"),
                                  pos=(20, 100), size=(32, 32))
        self.Bind(wx.EVT_BUTTON, self.close, img_btn)
        # 开关按钮
        toggle_btn = wx.ToggleButton(panel, id=self.ID_ToggleBtn,
                                     label="开关按钮", pos=(20, 120), 
                                     size=(100, 100))
        self.Bind(wx.EVT_TOGGLEBUTTON, self.click, toggle_btn)
        # 位图开关按钮
        img_toggle_btn = wx.BitmapToggleButton(panel, id=wx.ID_ANY,
                                               label=wx.Bitmap("exit.png"),
                                               pos=(20, 200), size=(32, 32))
        self.Bind(wx.EVT_TOGGLEBUTTON, self.toggle, img_toggle_btn)
        # 通用按钮
        gen_btn = buttons.GenButton(panel, id=self.ID_Btn, label="通用按钮",
                                    pos=(20, 240))
        self.Bind(wx.EVT_BUTTON, self.click, gen_btn)
        bitmap_text_Btn = buttons.GenBitmapTextButton(panel, id=100,
                                     label="文本",     
                                     bitmap=wx.Bitmap("exit.png"),
                                     pos=(20, 240), size=(120, 32))
        self.Bind(wx.EVT_BUTTON, self.click, bitmap_text_Btn)
        self.SetSize(900, 500)
        self.SetTitle("按钮应用")
        self.Centre()
        self.Show(True)

    def click(self, e):
        if e.GetId() == self.ID_ToggleBtn:
            result = "按钮开了" if e.IsChecked() else "按钮关了"
            print(result)
        else:
            print("普通按钮")

    def toggle(self, e):
        obj = e.GetEventObject()
        checked = obj.GetValue()
        result = "位图按钮开了" if checked else "位图按钮关了"
        print(result)

    def close(self, e):
        self.Close()


def main():
    app = wx.App(False)
    Button(None)
    app.MainLoop()


if __name__ == "__main__":
    main()

运行程序之后,弹出的窗口如下:

第13天 | 25天学会wxPython,动态组件之按钮

判断wx.ToggleButton的事件类型为wx.EVT_TOGGLEBUTTON,判断是开还是关,可用CommandEvent的IsChecked()方法,也可用GetEventObject()方法获取到ToggleButton对象,接着用GetValue()方法,判断是开还是关。

好了,按钮的内容就说到这了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:16:16  更:2021-09-06 11:16:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:18:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码