当前位置:首页 » 《随便一记》 » 正文

pythonGUI基础

14 人参与  2023年05月04日 18:17  分类 : 《随便一记》  评论

点击全文阅读


GUI简介

GUI是Graphical User Interface(图形用户界面)的缩写。在GUI中,并不只是输入文本和返回文本,用户可以看到窗口、按钮、文本框等图形,而且可以用鼠标单击,还可以通过键盘输入。GUI是与程序交互不同的一种方式。GUI有三个基本要素:输入、处理和输出。

工具包描述
wxPythonpython语言的一套GUI图形库,可以方便地创建完整的GUI用户界面
Kivy开源工具包,能让相同源代码创建的程序跨平台运行
Flexx纯python工具包,用来创建图形化界面应用程序。使用Web技术进行界面的渲染
PyQt是Qt库的python版本,支持跨平台
Tkinter是TK图形用户界面工具包标准的python接口。TK是一个轻量级的跨平台图形GUI开发工具
Pywin32允许用户像VC一样使用python开发win32应用
PyGTK让用户轻松创建具有图形用户界面的程序
pyui4win开源的采用自绘技术的界面库

使用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_FRAME          _STYLE,name="frame")

parent:框架的父窗口,如果是顶级窗口,这个值是None

id:关于新窗口的wxPythonID号。通常设为-1,让wyPython自动给生成一个新的id

title:窗口的标题

pos:一个wx.Point对象,它指定这个新窗口的左上角在屏幕中的位置。在图形用户界面程序中,通常(0,0)是显示器的左上角。这个默认的(-1,-1)将让系统决定窗口的位置。

size:一个wx.Size对象,它指定这个窗口的初始尺寸。默认的(-1,-1)将让系统决定窗口的初始尺寸。

style:指定窗口的类型的常量。可以使用或运算来组合它们。

name:框架的内在的名字,可以用它来寻找这个窗口。

import wxclass 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)    frame.Show()    app.MainLoop()

结果如下:
在这里插入图片描述

StaticText文本类

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

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

parent:父窗口插件

id:使用-1可以自动创建一个唯一的标识

label:显示在静态控件中的文本内容

pos:一个wx.Point或者一个Python元组,它是窗口部件的位置

size:一个wxSize或者一个Python元组,它是窗口部件的尺寸

style:样式标记

name:对象的名字

import wxclass 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",pos=(100,20))        font = wx.Font(16,wx.DEFAULT,wx.FONTSTYLE_NORMAL,wx.NORMAL)        title.SetFont(font)        #创建文本        wx.StaticText(panel,label='人生苦短,我用python',pos=(50,50))if __name__ == '__main__':    app = wx.App()#初始化应用    frame = MyFrame(parent=None, id=-1)#实例化MyFrame类,并传递参数    frame.Show()#显示窗口    app.MainLoop()#调用主循环方法

在这里插入图片描述

TextCtrl输入文本类

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

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

style:单行wx.TextCtrl的样式

wx.TE_CENTER:控件中的文本居中

wx.TE_LEFT:控件中的文本左对齐,默认行为

wx.TE_NOHIDESEL:文本始终高亮显示,只适用于windows系统

wx.TE_PASSWORD:不显示输入的文本,以*代替

wx.TE_PROCESS_ENTER:如果使用该参数,那么当用户在控件内按Enter键时,一个文本输入事件将被触发。否 则,按键事件内在的由该文本控件或该对话框管理。

wx.TE_PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在Tab键按下时创建。否则tab由对话框来管理,通常是控件间的切换。

wx.TE_READONLY:文本控件只为可读,用户不能修改其中的文本。

wx.TE_RIGHT:控件中的文本右对齐。

value:显示在该控件中的初始文本

validator:常用于过滤数据以确保只能输入要接受的数据

import wxclass MyFrame(wx.Frame):    def __init__(self,parent,id):        wx.Frame.__init__(self,parent,id,title="创建",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.label_pwd= wx.StaticText(panel, label="密 码", pos=(50, 90))        self.text_user=wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)        self.text_user = 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)    frame.Show()    app.MainLoop()

在这里插入图片描述

Button按钮类

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

wx.Button(parent,id,label,pos,size=wxDefaultSize,style=0,validator,name="button")
import wxclass MyFrame(wx.Frame):    def __init__(self,parent,id):        wx.Frame.__init__(self,parent,id,title="创建",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.label_pwd= wx.StaticText(panel, label="密 码", pos=(50, 90))        self.text_user=wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)        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)    frame.Show()    app.MainLoop()

在这里插入图片描述

BoxSizer

wxPython提供了5个Sizer,BoxSizer是其中最简单和灵活的。

import wxclass 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="请输入用户名和密码")        #添加容器,容器中控件按纵向排列        v=wx.BoxSizer(wx.VERTICAL)        v.Add(self.title,proportion=0,flag=wx.BOTTOM|wx.TOP|wx.ALIGN_CENTER,border=15)        panel.SetSizer(v)if __name__=='__main__':    app=wx.App()    frame=MyFrame(parent=None,id=-1)    frame.Show()    app.MainLoop()

在这里插入图片描述

Add()语法格式如下:

Box_Add(control,proportion,flag,border)

control:要添加的控件

proportion:所添加控件在定义的定位方式所代表方向上占据的空间比例。如果有3个按钮,它们的比例分别是0、1和2,它们都已经添加到一个宽度为30的水平排列wx.BoxSizer,起始宽度都是10.当sizer的宽度从30变成60时,按钮1的宽度保持不变,仍然是10,按钮2的宽度变为20,按钮3的宽度变为30

flag:flag参数与border参数结合使用可以指定边距宽度:

wx.LEFT:左边距

wx.RIGHT:右边距

wx.BOTTOM:底边距

wx.TOP:上边距

wx.ALL:上下左右四个边距

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

wx.ALIGN_LEFT:左边对齐wx.ALIGN_RIGHT:右边对齐wx.ALIGN_TOP:顶部对齐wx.ALIGN_BOTTOM:底边对齐wx.ALIGN_GENTER_VERTICAL:垂直对齐wx.ALIGN_GENTER_HORIZONTAL:水平对齐wx.ALIGN_GENTER:居中对齐wx.EXPAND:所添加控件将占有sizer定位方向上所有可用的空间border:控制所添加控件的边距,就是在部件之间添加一些像素的空白

事件处理

用户执行的动作就叫作事件,比如单击按钮就是一个单击事件

利用控件的Bind()方法可以将事件处理函数绑定到给定的事件上。例如,为“确定”按钮添加一个单击事件,代码如下:

bt_confirm.Bind(wx.EVT_BUTTON,OnclickSubmit)

wx.EVT_BUTTON:事件类型为按钮类型。

wx.EVT_MOTION:用户移动鼠标。

wx.ENTER_WINDOW:用户进入窗口控件

wx.LEAVE_WINDOW:用户离开窗口控件

wx.EVT_MOUSEWHEEL:鼠标滚轮滑动

OnclickSubmit:方法名。事件发生时执行该方法。

import wxclass 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='确定', pos=(105, 130))        self.bt_cancel = wx.Button(panel, label='取消', pos=(195, 130))        self.bt_confirm.Bind(wx.EVT_BUTTON,self.OnclickSubmit)        self.bt_cancel.Bind(wx.EVT_BUTTON, self.OnclickCancel)              self.title = wx.StaticText(panel, label="请输入用户名和密码", pos=(140, 20))        self.label_user = wx.StaticText(panel, label="用户名", pos=(50, 50))        self.label_pwd = wx.StaticText(panel, label="密 码", pos=(50, 90))        self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(235, 25), style=wx.TE_LEFT)        self.text_password = wx.TextCtrl(panel, pos=(100, 90), size=(235, 25), style=wx.TE_PASSWORD)    def OnclickSubmit(self,event):        message=""        username=self.text_user.GetValue()        password = self.text_password.GetValue()        if username=="" or password=="":            message="用户名或密码不能为空"        elif username =="mr" or password =="mrsoft":            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)    frame.Show()    app.MainLoop()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/60784.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1