草庐IT

pythonGUI基础

京都小白 2023-04-04 原文

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 wx

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)
    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 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",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 wx
class 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 wx
class 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 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="请输入用户名和密码")
        #添加容器,容器中控件按纵向排列
        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 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='确定', 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()


有关pythonGUI基础的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  3. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  4. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  5. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  6. c++基础-运算符 - 2

    目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在

  7. 计算机必读基础书籍 - 2

    一.计算机组成原理    这本书利用组合逻辑、同步时序逻辑电路设计的相关知识,从逻辑门开始逐步构建运算器、存储器、数据通路和控制器,最终集成为完整的CU原型系统,使读者从设计者的角度理解计算机部件构成及运行的基本原理,掌握软硬件协同的概念。    全书共9章,主要内容包括计算机系统概述、数据信息的表示、运算方法与运算器、存储系统、指令系统、中央处理器、指令流水线、总线系统、输入输出系统。1.计算机系统概述1.1计算机发展历程    计算机是一种能够按照事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。1946年2月,世界上第一台电子数字计算机ENIAC(ElectronicNum

  8. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  9. ruby - Ruby基础知识 - 2

    Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。已关闭8年。什么是学习ruby语言

  10. Web学习(一)——html基础标签 - 2

    html基础标签学习网站:https://www.acwing.com/学习查询网站:https://developer.mozilla.org/zh-CN/!+tab自动出现框架1.1文档结构html的所有标签都为树形结构,例如:Web应用课第一讲html标签HTML元素表示一个HTML文档的根(顶级元素),所以它也被称为根元素。所有其他元素必须是此元素的后代。head标签HTML元素规定文档相关的配置信息(元数据),包括文档的标题,引用的文档样式和脚本等。body标签HTML元素表示文档的内容。document.body属性提供了可以轻松访问文档的body元素的脚本。title标签HTML

随机推荐