龙空技术网

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

老陈说编程 291

前言:

如今同学们对“java窗口按钮”大约比较着重,各位老铁们都需要剖析一些“java窗口按钮”的相关资讯。那么小编同时在网络上汇集了一些有关“java窗口按钮””的相关内容,希望同学们能喜欢,你们快快来学习一下吧!

组件(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 wximport wx.lib.buttons as buttons# 继承Frameclass 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()

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

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

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

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

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

#python##程序员##好平台好讲师##热搜##头条#

标签: #java窗口按钮 #滑动窗口最大和 python #python如何调整按钮的位置 #java怎么让按钮居中