Python之wxPython框架的使用

这篇具有很好参考价值的文章主要介绍了Python之wxPython框架的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、安装wxPython

  wxPython是个成熟而且特性丰富的跨平台GUI工具包。由Robin Dunn 和Harri Pasanen开发,官方网站:http://wxpython.org。wxPython安装非常简单,使用pip工具安装wxPython只需要一个命令:

pip install -U wxPthon

  在Windows的cmd命令下,使用pip安装wxPython如下图所示:

Python之wxPython框架的使用


二、创建一个 wx.App 的子类

  在开始创建应用程序之前,先来创建一个没有任何功能的子类。创建和使用一个 wx.App 的子类,需要执行如下4个步骤:

  (1)定义这个子类。
  (2)在定义的子类中写一个Onlnit()初始化方法。
  (3)在程序的主要部分创建这个类的一个实例。
  (4)调用应用程序实例的MainLoop()方法,这个方法将程序的控制权转交给wxPython。

  创建一个没有任何功能的子类,具体代码如下:

# _*_ coding:utf-8 _*_
import wx  # 导入wxPython


class App(wx.App):
    # 初始化方法
    def OnInit(self):
        frame = wx.Frame(parent=None, title="Hello wyPython")  # 创建窗口
        frame.Show()  # 显示窗口
        return True  # 返回值


if __name__ == "__main__":
    app = App()  # 创建APP类的实例
    app.MainLoop()  # 调用App类的MainLoop()主循环方法

  上述代码中,定义了一个子类App(),它继承父类wx.App,子类中包含一个初始化方法OnInit()。在主程序中创建类的实例,然后调用MainLoop()主循环方法,运行结果如图所示:

Python之wxPython框架的使用


三、直接使用wx.App

  通常,如果在系统中只有一个窗口的话,可以不创建wx.App子类,直接使用wx.App。这个类提供了一个最基本的OnInit()初始化方法,具体代码如下:

# _*_ coding:utf-8 _*_
import wx  # 导入wxPython

app = wx.App()  # 初始化wx.App类
frame = wx.Frame(None, title="Hello wyPython")  # 定义一个顶级窗口
frame.Show()  # 显示窗口
app.MainLoop()  # 调用wx.App类的MainLoop()主循环方法

  上述代码中,wx.App()初始化wx.App类,包含了OnInit()方法,运行结果与上图相同。


四、使用wx.Frame 框架

  在GUI中框架通常也称为窗口。框架是一个容器,用户可以将它在屏幕上任意移动,并可对它进行缩放,它通常包含诸如标题栏、菜单等等。在wxPython中,wx.Frame是所有框架的父类。当创建wx.Frame的子类时,子类应该调用其父类的构造器wx.Frame.__ init __()。wx.Frame的构造器语法格式如下:

wx.Frame(parent, id=-1, title="", pos=wx.DefaultPosition, size=wx.DefaultSize,
         style=wx.DEFAULT_DIALOG_STYLE, name="frame")

参数说明:

  • parent:框架的父窗口。如果是顶级窗口,这个值是None。
  • id:关于新窗口的wxPython ID 号。通常设置为-1,让wxPython 自动生成一个新的ID。
  • title:窗口的标题。
  • pos:一个wx.Point对象,它指定这个新窗口的左上角在屏幕中的位置。在图形用户界面程序中,通常(0,0)是显示器的左上角。这个默认的(-1,-1)将让系统决定窗口的位置。
  • size:一个wx.Size对象,它指定这个窗口的初始尺寸。这个默认的(-1,-1))将让系统决定窗口的初始尺寸。
  • style:指定窗口的类型的常量。可以使用或运算来组合它们。
  • name:框架的内在的名字。可以使用它来寻找这个窗口。

  创建wx.Frame 子类的代码如下:

# _*_ coding:utf-8 _*_
import wx  # 导入wxPython


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title="创建Frame", pos=(100, 100), size=(300, 300))


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例化MyFrame,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  上述代码中,在主程序中调用MyFrame类,并且传递2个参数。在MyFrame类中,自动执行__init__()初始化方法,接收参数。然后调用父类wx.Frame的__init__()初始化方法,设置顶级窗口的相关属性。运行结果如果所示:

Python之wxPython框架的使用


五、常用控件

  创建完窗口以后,我们可以在窗口内添加一些控件,所谓的控件,就是经常使用的按钮、文档、输入框、单选框等。

1.Static Text 文本类

  对于所有的UI工具来说,最基本的任务就是在屏幕上绘制纯文本。在wxPython中,可以使用wx.StaticText类来完成。使用wx.StaticText类能够改变文本的对齐方式、字体和颜色等。wx.StaticText类的构造函数语法格式如下:

wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize
              style = 0, name = "staticText")

参数说明:

  • parent:父窗口部件。
  • id:标识符。使用-1可以自动创建一个唯一的标识。
  • label:显示在静态控件中的文本内容。
  • pos:一个wx.Point或一个Python元组,它是窗口部件的位置。
  • size:一个wx.Size或一个Python元组,它是窗口部件的尺寸。
  • style:样式标记。
  • name:对象的名字。

  示例:使用wx.StaticText输出Python之禅
  在Python控制台输入import this后,会说出如图所示的结果,结果中的英文就是通常所示的Python之禅。

Python之wxPython框架的使用
  下面使用StaticText类输出中午版的Python之禅。具体代码如下:

# _*_ coding:utf-8 _*_
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title="创建StaticText类",
                          pos=(100, 100), size=(600, 400))
        panel = wx.Panel(self)  # 创建画板

        # 创建标题,并设置字体
        title = wx.StaticText(panel, label="Python之禅-Tim Peters", pos=(100, 20))
        font = wx.Font(16, wx.DEFAULT, wx.FONTSTYLE_NORMAL, wx.NORMAL)

        # 创建文本
        wx.StaticText(panel, label="优美胜于丑陋", pos=(50, 50))
        wx.StaticText(panel, label="明了胜于晦涩", pos=(50, 70))
        wx.StaticText(panel, label="简洁胜于复杂", pos=(50, 90))
        wx.StaticText(panel, label="复杂胜于凌乱", pos=(50, 110))
        wx.StaticText(panel, label="扁平胜于嵌套", pos=(50, 130))
        wx.StaticText(panel, label="间隔胜于紧凑", pos=(50, 150))
        wx.StaticText(panel, label="可读性很重要", pos=(50, 170))
        wx.StaticText(panel, label="即便假借特例的实用之名,也不可违背这些规则", pos=(50, 190))
        wx.StaticText(panel, label="不要包容所以错误,除非你确定需要这样做", pos=(50, 210))
        wx.StaticText(panel, label="当存在多种可能,不要尝试去猜测", pos=(50, 230))
        wx.StaticText(panel, label="而是尽量找一种,最好是唯一一种明显的解决方案", pos=(50, 250))
        wx.StaticText(panel, label="虽然这并容易,因为你不是Python之父", pos=(50, 270))
        wx.StaticText(panel, label="做也许好过不做,但不假思索就动手还不如不做", pos=(50, 290))
        wx.StaticText(panel, label="如果你无法描述你的方案,那肯定不是一个好方案;反之亦然", pos=(50, 310))
        wx.StaticText(panel, label="命名空间是一种绝妙的理念,我们应该多加利用", pos=(50, 330))


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  上述代码中,使用“ panel = wx.Panel(self)”语句来创建画板,并将panel作为父类,然后将组件放入窗体中。此外,使用wx.Font类设置字体。创建一个字体实例,需要使用如下构造函数:

wx.Font(pointSize, family, style, weight, underline=False,faceName="",
        encoding=wx.FONTFAMILY_DEFAULT)

参数说明:

  • pointSize:字体的整数尺寸,单位为磅。
  • family:用于快速指定一个字体而无须知道该字体实际的名字。
  • style:指明字体是否倾斜。
  • weight:指明字体的醒目程度。
  • underline:仅在Windows系统下有效,如果取值为True,则加下划线;False为无下划线。
  • faceName:指定字体名。
  • encoding:允许在几个编程中选择一个,大多数情况可以使用默认编码。

  运行结果如图所示:

Python之wxPython框架的使用


2.TextCtrl 输入文本类

  wx.StaticText类只能够用于显示纯粹的静态文本,但是有时需要输入文本与用户进行交互,此时,就需要使用wx.TextCtrl类,它允许输入单行和多行文本。它也可以作为密码输入控件,掩饰所按下的按键。

  wx.TextCtrl类的构建函数语法格式如下:

wx.TextCtrl(parent, id, value="", pos=wx.DefaultPosition, size=wx.DefaultSize,
            style=0, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr)

  参数parent,id,pos,size,style和name与wx.StaticText构造函数相同,重点看一下其他参数。

  • style:单行wx.TextCtrl的样式,取值及说明如下:
    • wx.TE_CENTER:控件中的文本居中。
    • wx.TE_LEFT:控件中的文本左对齐。默认行为。
    • wx.TE_NOHIDESEL:文本始终高亮显示,只适用于Windows。
    • wx.TE_PASSWORD:不显示所输入的文本,以星号(*)代替显示。
    • wx.PROCESS_ENTER:如果使用改参数,那么当用户在控制键内按下键时,一个文本输入事件将被触发;否则,按键事件内在的由该文本控件或该对话框管理。
    • wx.PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在键按下时创建(一般意味一个制表符将被插入文本);否则,键由对话框来管理,通常是控件的切换。
    • wx.TE_READONLY:文本控件为只读,用户不能修改其中的文本。
    • wx.TE_RIGHT:控件的文本右对齐。
  • value:显示在该控件中的初始文本。
  • validator:常用用于过滤数据以确保只能键入要接受的数据。

  示例:使用wx.TextCtrl类实现登录界面

  使用wx.TextCtrl类和wx.StaticText类实现一个包含用户名和密码的登录界面。具体代码如下:

class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title="创建TextCtrl类", size=(400, 300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建文本和输入框
        self.title = wx.StaticText(panel, label="请输入用户名和密码", pos=(140, 20))
        self.label_user = wx.StaticText(panel, label="用户名:", pos=(50, 50))
        self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(235, 25), style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel, pos=(50, 90), label="密  码:")
        self.text_password = wx.TextCtrl(panel, pos=(100, 90), size=(235, 25), style=wx.TE_PASSWORD)


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  上述代码中,使用wx.TextCtrl类生成用户名,并且设置控件中的文本左对齐。使用wx.TextCtrl类生成密码,并且设置文本用星号代替。运行结果如图所示:
Python之wxPython框架的使用


3.Button 按钮类

  按钮是GUI界面中应用最为广泛的控制,它常用于捕获用户生成的点击事件,其明显的用途是触发绑定到一个处理函数。

  wxPython类库提供不同类型的按钮,其中最简单、常用的是wx.Button类。wx.Button类的构造函数如下所示:

wx.Button(parent, id, label, pos, size=wx.DefaultSize, style=0, validator, name="botton")

  wx.Button类的参数与wx.TextCtrl类的参数基本相同,其中label是显示在按钮上的文本。

  示例:为登录页面添加“确定”和“取消”按钮
  使用wx.Butto,在前一个实例的基础上添加“确定”和“取消”按钮,具体代码如下:

# _*_ coding:utf-8 _*_
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title="创建TextCtrl类", size=(400, 300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建文本和输入框
        self.title = wx.StaticText(panel, label="请输入用户名和密码", pos=(140, 20))
        self.label_user = wx.StaticText(panel, label="用户名:", pos=(50, 50))
        self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(235, 25), style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel, pos=(50, 90), label="密  码:")
        self.text_password = wx.TextCtrl(panel, pos=(100, 90), size=(235, 25), style=wx.TE_PASSWORD)
        # 创建"确认"和"取消"按钮
        self.bt_confirm = wx.Button(panel, label="确认", pos=(105, 130))
        self.bt_cancel = wx.Button(panel, label="取消", pos=(195, 130))


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  运行结果如图所示:

Python之wxPython框架的使用


六、BoxSizer 布局

  在前面的例子中,使用了文本和按钮等控件,并将这些控件通过 pos 参数布置在 pannel 画板上。虽然这种设置坐标的方式很容易理解,但是过程很麻烦。此外,控件的几何位置是绝对位置,也就是固定的。当调整窗口大小时,界面会变得不美观。在wxPython中有一种更智能的布局方式——sizer(尺寸器)。sizer是用于自动布局一组窗口控件的算法。sizer被附加到一个容器中,通常是一个框架或板面。在父容器中创建的子窗口控件必须分别添加到sizer中。当sizer被附加到容器时,它随后就可以管理它所包含的子布局。

  wxPython 提供了 5sizer ,定义在下表中:

sizer名称 描述
BoxSizer 在一条水平或垂直线上的窗口部件的布局。当尺寸改变时,控件窗口部件的行为上很灵活。通常用于嵌套的样式。可用于几乎任何类型的布局。
GridSizer 一个十分基础的网络布局。当要放置的窗口部件都是同样的尺寸且整齐地放入一个规则的网格中时可以使用它。
FlexGridSizer 对GridSizer稍微做了些改变,当窗口部件都是同样的尺寸时,可以有更好的结果。
GridBagSIzer GridSizer系列中最灵活的成员。使得网格中的窗口部件可以更随意地放置位置。
StaticBoxSizer 一个标准的 Box Sizer。带有标题和环线。

1. 什么是 BoxSizer

  BoxSizer是 wxPython 所提供的 sizer 中的最简单和最灵活的。一个 BoxSize 是一个垂直列或水平行,窗口部件在其中从左至右或从上到下布置在一条线上。虽然这听起来好像用处不大,但是相互之间嵌套sizer 的能力使你能够在每行或每列很容易放置不同数量的项目。由于每个 sizer 都是一个独立的实体,因此你的布局就有了更多的灵活性。对于大多数的应用程序而言,一个嵌套有水平sizer的垂直sizer将使你能够创建你所需要的布局。

2. 使用 BoxSizer 布局

  尺寸器会管理组件的尺寸。只要将部件添加到尺寸器上,在加上一些布局参数,然后让尺寸器自己去管理父组件的尺寸。下面使用 BoxSizer实现简单布局。代码如下:

# _*_ coding:utf-8 _*_
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "用户登录", size=(400, 300))

        # 创建面板
        panel = wx.Panel(self)
        self.title = wx.StaticText(panel, label="请输入用户名和密码")
        # 添加容器,容器中的控件按纵向排列
        vsizer = wx.BoxSizer(wx.VERTICAL)
        vsizer.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=15)
        panel.SetSizer(vsizer)


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  运行结果如下图所示:

Python之wxPython框架的使用

  上述代码中,设置了增加背景控件(wx.Panel),并创建了一个wx.BoxSizer,它带有一个决定其是水平还是垂直的参数(wx.HORIZONTAL或者wx.VERTICAL), 默认为水平。然后使用Add()方法将控件加入sizer,最后使用面板的SetSizer()方法设定它的尺寸器。

  Add() 方法的语法格式如下:

Box.Add(control, proportion, flag, border)

参数说明:

  • control: 要添加的控件
  • proportion: 所添加控件在定义的定位方式所代表的方向上占据的空间比列。如果有三个按钮,它们的比例值分别为0、1和2,它们都已经添加到一个宽度为30的水平排列wx.BoxSizer中,起始宽度都是10。当sizer的宽度从30变成60时,按钮1的宽度保持不变,乃然是10,按钮2的宽度约为(10+(60-30)*1/(1+2))=30,按钮2约为20。
  • flag: flag参数与border参数结合使用可以指定边距宽度,包括以下选项:
    • wx.LEFT:左边距。
    • wx.RIGHT:右边距。
    • wx.BOTTOM:底边距。
    • wx.TOP:上边距。
    • wx.ALL:上下左右4个边距。

  可以通过竖线“|”操作符(operator),来联合使用这些标志,比如“wx.LEFT | wx.BOTTOM”。此外,flag参数还可以与proportion参数结合,指定控件本身的对齐(排列)方式。

  • 包括以下选项:
    • wx.ALIGN_LEFT:左边对齐。
    • wx.ALIGN_RIGHT:右边对齐。
    • wx.ALIGN_TOP:顶部对齐。
    • wx.ALIGN_BOTTOM:底边对齐。
    • wx.ALIGN_CENTER_VERTICAL:垂直对齐。
    • wx.ALIGN_CENTER_HORIZONTAL:水平对齐。
    • wx.ALIGN_CENTER:居中对齐。
  • border: 控制所添加控件的边距,就是在部件之间添加一些像素的空白。

  示例:使用BoxSizer 设置登录界面布局,具体代码如下:

# _*_ coding:utf-8 _*_
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "用户登录", size=(400, 300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建“确定”和“取消”按钮,并绑定事件
        self.bt_confirm = wx.Button(panel, label="确定")
        self.bt_cancel = wx.Button(panel, label="取消")
        # 创建文本,左对齐
        self.title = wx.StaticText(panel, label="请输入用户名和密码")
        self.label_user = wx.StaticText(panel, label="用户名:")
        self.text_user = wx.TextCtrl(panel, style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel, label="密 码:")
        self.text_password = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
        # 添加容器,容器中的控件横向排列
        hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_user.Add(self.label_user, proportion=0, flag=wx.ALL, border=5)
        hsizer_user.Add(self.text_user, proportion=1, flag=wx.ALL, border=5)
        hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_pwd.Add(self.label_pwd, proportion=0, flag=wx.ALL, border=5)
        hsizer_pwd.Add(self.text_password, proportion=1, flag=wx.ALL, border=5)
        hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_button.Add(self.bt_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5)
        hsizer_button.Add(self.bt_cancel, proportion=0, flag=wx.ALIGN_CENTER, border=5)
        # 添加容器,容器中控件纵向排列
        vsizer_all = wx.BoxSizer(wx.VERTICAL)
        vsizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTRE, border=15)
        vsizer_all.Add(hsizer_user, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
        vsizer_all.Add(hsizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
        vsizer_all.Add(hsizer_button, proportion=0, flag=wx.ALIGN_CENTRE | wx.TOP, border=15)
        panel.SetSizer(vsizer_all)


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  在上述代码中,首先创建按钮和文本控件,然后将其添加到容器中,并设置横向排列。按着设置纵向排列。在布局的过程中,通过设置每个控件的flag和border参数,实现控件位置间的布局。至此,使用BoxSizer将绝对位置布局更改为相对位置布局,运行结果如下图所示:
Python之wxPython框架的使用


七、事件处理

1.什么是事件

  完成布局以后,接下来就是输入用户名和密码。当点击“确定”按钮时,检验输入的用户名和密码是否正确,并输出相应的提示信息。当单击“取消”按钮时,清空已经输入的用户名和密码。要实现这样的功能,就需要使用wxPython的事件处理。

  那什么是事件呢?用户执行的动作就叫作事件(event),比如单击按钮,就是一个点击事件。


2.绑定事件

  当发生一个事件时,需要让程序注意这些事件并做出反应。这时,可以将函数绑定到所涉及事件可能发生的控件上。例如,为“确定”按钮添加一个点击事件,代码如下:

bt_confirm.Bind(wx.EVT_BUTTON,OnclickSubmit)

参数说明:

  • wx.EVT_BUTTON: 事件类型为按钮类型。在wxPython中有很多wx.EVT_开头的事件类型,例如,类型wx.EVT_MOTION 产生于用户移动鼠标;类型wx.ENTER_WINDOW和wx.LEAVE_WINDOW产生于当鼠标进入或离开一个窗口控件;类型wx.EVT_MOUSEWHEEL被绑定到鼠标滚轮的活动。
  • OnclickSubmit: 方法名。事件发生时执行该方法。

  示例:使用事件判断用户登录

  在上面示例的基础上,分别为“确定”和“取消”按钮添加点击事件。当用户输入用户名和密码后,单击“确定”按钮,如果输入的用户名为“xiaocaiji”且密码为“123456”,则弹出对话框提示“登录成功”,否则提示“用户名和密码不匹配”。当用户点击“取消”按钮时,情空用户输入的用户名和密码。代码如下:

# _*_ coding:utf-8 _*_
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "用户登录", size=(400, 300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建“确定”和“取消”按钮,并绑定事件
        self.bt_confirm = wx.Button(panel, label="确定")
        self.bt_confirm.Bind(wx.EVT_BUTTON, self.OnclickSubmit)
        self.bt_cancel = wx.Button(panel, label="取消")
        self.bt_cancel.Bind(wx.EVT_BUTTON, self.OnclickCancel)
        # 创建文本,左对齐
        self.title = wx.StaticText(panel, label="请输入用户名和密码")
        self.label_user = wx.StaticText(panel, label="用户名:")
        self.text_user = wx.TextCtrl(panel, style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel, label="密 码:")
        self.text_password = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
        # 添加容器,容器中的控件横向排列
        hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_user.Add(self.label_user, proportion=0, flag=wx.ALL, border=5)
        hsizer_user.Add(self.text_user, proportion=1, flag=wx.ALL, border=5)
        hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_pwd.Add(self.label_pwd, proportion=0, flag=wx.ALL, border=5)
        hsizer_pwd.Add(self.text_password, proportion=1, flag=wx.ALL, border=5)
        hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_button.Add(self.bt_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5)
        hsizer_button.Add(self.bt_cancel, proportion=0, flag=wx.ALIGN_CENTER, border=5)
        # 添加容器,容器中控件纵向排列
        vsizer_all = wx.BoxSizer(wx.VERTICAL)
        vsizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTRE, border=15)
        vsizer_all.Add(hsizer_user, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
        vsizer_all.Add(hsizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
        vsizer_all.Add(hsizer_button, proportion=0, flag=wx.ALIGN_CENTRE | wx.TOP, border=15)
        panel.SetSizer(vsizer_all)

    def OnclickSubmit(self, event):
        """单击“确定”按钮,执行方法"""
        message = ""
        username = self.text_user.GetValue()  # 获取输入的用户名
        password = self.text_password.GetValue()  # 获取输入的密码
        if username == "" or password == "":  # 判断用户密码是否为空
            message = "用户名或密码不能为空"
        elif username == "xiaocaiji" and password == "123456":  # 用户名和密码正确
            message = "登录成功"
        else:
            message = "用户与密码不匹配"  # 用户名和密码不正确
        wx.MessageBox(message)  # 弹窗提示

    def OnclickCancel(self, event):
        """单击“取消”按钮,执行方法"""
        self.text_user.SetValue("")  # 清空输入的用户名
        self.text_password.SetValue("")  # 清空输入的密码


if __name__ == "__main__":
    app = wx.App()  # 初始化应用
    frame = MyFrame(parent=None, id=-1)  # 实例MyFrame类,并传递参数
    frame.Show()  # 显示窗口
    app.MainLoop()  # 调用MainLoop()主循环方法

  上述代码分别使用了bind()函数为bt_confirm和bt_cancel绑定了单击事件,单击“确定”按钮时,执行OnclickSubmit()方法判断用户和密码是否正确,然后使用wx.MessageBox()方法弹出提示框。单击“取消”按钮时,执行 OnclickSubmit()方法清空用户名和密码。用户名正确和密码正确时,运行结果如下图:

Python之wxPython框架的使用
  否则运行结果如下图:

Python之wxPython框架的使用文章来源地址https://www.toymoban.com/news/detail-459996.html


到了这里,关于Python之wxPython框架的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring security为啥是个垃圾框架?

    古时候写代码,权限这块写过一个库,基本就是一个泛型接口,里面有几个方法: 如验证输入的principal和credentials,返回token和authorities和roles,role就是一堆authorities集,也就说就是返回一堆authorities。然后每次请求会拿token找到authorities,然后再判断当前请求的资源(其实就是

    2024年02月08日
    浏览(43)
  • 引入成熟的Pytest自动化测试框架

    虽然我们能使用脚本编写自动化测试框架,但没有必要重复找车轮子, 引入成熟的自动化测试框架 即可, Pytest是目前最成熟、功能最全面的Python测试框架之一 ,简单灵活、易于上手,可完全兼容其他测试框架如unitest,支持参数化和测试编排功能,扩展性强。 1、安装Pytes

    2024年02月20日
    浏览(40)
  • Go开源世界主流成熟ORM框架gorm实践分享

    @ 目录 概述 定义 核心功能 声明模型与约定 gorm.Model 字段级权限 时间惯例 嵌入结构 字段标签 使用 安装 数据库链接 连接池 CRUD 接口 创建 查询 高级查询 修改 删除 原始SQL 事务 转换 分片 序列化 GORM 官网地址 https://gorm.io/ 最新版本v1.25.1 GORM 官网文档地址 https://gorm.io/docs/ G

    2024年02月05日
    浏览(45)
  • Python Web框架 Flask 安装、使用

    Python Web框架 Flask 安装 安装 Flask 框架 首先需要安装 Flask 框架, 可以通过以下命令安装: 创建 Flask 应用程序 在本地创建一个文件夹,例如叫 myapp ,在该文件夹中创建一个 Python 文件 app.py ,并在其中编写以下代码: 在上面的代码中,我们导入 Flask 框架,并创建了一个名为 ap

    2024年02月17日
    浏览(46)
  • python爬虫框架selenium安装和使用教程

    – Selenium是一个常用的Python爬虫框架,可以模拟浏览器行为,实现一些自动化的操作。本教程将介绍Selenium的基础知识、使用方法,包括导入包、安装、示例、数据保存等方面。 在开始之前,我们需要先导入Selenium相关的包。这里我们用Python3作为演示,所以需要安装对应版本

    2024年02月02日
    浏览(41)
  • Python GUI应用程序开发之wxPython库详解

      wxPython是一个强大的跨平台GUI工具包,它使用Python编程语言开发,提供了丰富的控件功能。如果你是一名Python开发者,而且希望创建一个功能齐全的桌面应用程序,那么wxPython是一个值得考虑的选择。wxPython是wxWidgets C++库的Python绑定版本,它支持各种操作系统,包括Windows、

    2024年02月05日
    浏览(43)
  • 【100天精通Python】Day49:Python Web编程_Web框架,Flask框架从安装到使用

    目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由

    2024年02月09日
    浏览(49)
  • wxPython使用matplotlib绘制动态曲线

    我们创建了一个继承自 wx.Frame 的自定义窗口类 MyFrame 。在 MyFrame 的构造函数中,我们创建了一个 matplotlib 的 Figure 对象和一个 FigureCanvas 对象,用于在窗口中显示绘图结果。然后,我们使用 numpy 生成了一个包含100个点的x轴坐标数组 self.x 和对应的正弦值数组。接下来,我们使

    2024年02月12日
    浏览(41)
  • Python GUI框架---- PySide6安装与使用 - 打包部署

    安装Python和PySide6 :首先,确保已经安装了Python和PySide6 。你可以从Python官方网站(https://www.python.org)下载并安装Python,然后使用pip命令安装PySide6 。 设计GUI界面:使用Qt Designer工具来设计GUI界面。Qt Designer是一个可视化的界面设计工具,可以帮助你创建和布局GUI界面。你可以

    2024年04月09日
    浏览(48)
  • 解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题

    网上关于 wxPython安装失败,安装速度过慢,以及安装成功后PyCharm中import wx仍然爆红 的文章有很多,也特别杂,解决起来特别困难,今天在这里对问题的处理进行一个整合,希望能帮助到大家。 安装wxPython这里运用了清华大学的镜像,国外网址一般下载很慢,最后导致失败。

    2023年04月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包