文章目录

  • 一、python中的图形用户界面开发库
    • 1.Tkinter
    • 2.PyQt
    • 3.wxPython
    • 4.自定义窗口类
    • 5.在窗口中添加控件
  • 二、事件处理
    • 1.事件源
    • 2.事件
    • 3.事件处理程序
  • 三、布局管理
    • 1.控件的位置和大小没有随着窗口的变化而变化。
    • 2.盒子布局管理器
      • (1) 盒子布局管理器类
      • (2)添加子窗口(或控件)到父窗口
  • 四、控件
    • 1.文本输入控件
    • 2.复选框和单选按钮
    • 3. 列表
    • 4. 静态图片控件

一、python中的图形用户界面开发库

1.Tkinter

  Tkinter是python官方提供的图形用户界面开发库,用于封装Tk GUI工具包,跨平台。

2.PyQt

  PyQt是非Python官方提供的图形用户界面开发库,用于封装Qt工具包,跨平台。

3.wxPython

  wxPython是非Python官方提供的图形用户界面开发库,也跨平台。
  若要构建一个简单的wxPython程序,则至少需要一个应用(wx.App)对象和一个窗口(wx.Frame)对象。

#coding=utf-8import wx   #wx是使用wxPython时要导入的模块
#创建应用程序对象
app = wx.App()#创建窗口对象
frm = wx.Frame(None, title="第一个wxPython程序!",size=(400, 300), pos=(100, 100))   #所在的父窗口,None表示没有父窗口;size表示窗口大小;pos表示窗口位置。
#显示窗口
frm.Show()  #窗口默认隐藏,需要调用Show()方法才能显现。#进入主事件循环
app.MainLoop()  #让应用程序进入主事件循环中

4.自定义窗口类

#coding=utf-8import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):    #自定义窗口类def_init_(self):super()._init_(None, title="第一个wxPython程序", size=(400, 300), pos=(100, 100))#你的代码#窗口中的控件,在这里添加#创建应用程序对象
app = wx.App()#创建窗口对象
frm = MyFrame()
#显示窗口
frm.Show()#进入主事件循环
app.MainLoop()

5.在窗口中添加控件

#coding=utf-8import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):def _init_(self):super()._init_(None, title="第一个wxPython程序", size=(400,300), pos=(100, 100))panel = wx.Panel(parent=self)   #创建面板对象,参数parent传递的是self,即设置面板所在的父容器为当前窗口对象。statictext = wx.StaticText(parent=panel, label='Hello World!', pos=(10, 10))   #创建静态文本(StaticText)对象,将静态文本对象放到panel面板中。#parent参数传递的是panel#参数label是在静态文本对象上显示的文字#参数pos用于设置静态文本对象。app.wx.App()  #创建应用程序对象frm = MyFrame()  #创建窗口对象
frm.Show()  #显示窗口app.MainLoop()  #进入主事件循环

  在以上事例中,面板被放到窗口中,而静态文本对象被放到面板中。

二、事件处理

1.事件源

  事件发生的场所,就是各个控件。(例如:按钮事件的事件源是按钮)

2.事件

  wxPython中的事件被封装为事件类wx.Event及其子类,例如按钮事件类wx.CommandEvent,鼠标事件类是wx.MoveEvent。

3.事件处理程序

  一个响应用户事件的方法。

示例:

#coding=utf-8
import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):def _init_(self):super()._init_(None, title="事件处理", size=(300, 180))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label="请单击OK按钮", pos=(110. 20))b = wx.Button(parent=panel, label='OK', pos=(100, 50))  #创建按钮对象self.Bind(wx.EVT_BUTTON, self.on_click,b)  #绑定事。#wx.EVT_BUTTON是事件类型,即按钮单击事件;#self.on_click是事件处理程序;#b是事件源,即按钮对象。def on_click(self, event):self.statictext.SetLabelText('Hello, Word.')app = wx.App()  #创建应用程序对象frm = MyFrame()  #创建窗口对象
frm.Show()  #显示窗口app.MainLoop()   #进入主事件循环

三、布局管理

1.控件的位置和大小没有随着窗口的变化而变化。

2.盒子布局管理器

(1) 盒子布局管理器类

  盒子布局管理器类是wx.BoxSizer,Box布局管理器是最常用的布局管理器,它可以让其中的子窗口(或控件)沿垂直或水平方向布局。

  • 设置为水平方向布局,wx.HORIZONTAL是默认值,可以省略。

  • 设置为垂直方向布局

(2)添加子窗口(或控件)到父窗口
  • wx.BoxSizer对象的Add()方法添加子窗口(或控件)到父窗口。

  • 添加到另一个布局对象,用于布局嵌套

  • flag对齐标志

  • flag边框标志

  • flag调整尺寸标志

  • 示例

#coding=utf-8
import wx#自定义窗口类MyFrame
class MyFrame(wx.Frame):def _init_(self):super()._init_(None. title="事件处理", size=(300, 180))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label="请单击OK按钮")b = wx.Button(parent=panel, label='OK')self.Bind(wx.EVT_BUTTON, self.on_click, b)#布局相关代码:#创建垂直方向的盒子布局管理器对象vboxvbox = wx.BoxSizer(wx.VERTICAL)#添加静态文本到vbox布局管理器#proportion=1 :两个空间proportion都为1,所以两个空间各占二分之一。#wx.AlIGN_CENTER_HORIZONTAL指空间水平居中#wx.FIXED_MINSIZE指刚好包裹控件#wx.TOP设置顶部有边框#border=30设置顶部边框宽度为30vbox.Add(self.statictect, proportion=1, flag=wx.AlIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE|wx.TOP, border=30)#添加按钮b到vbox布局管理器#wx.EXPAND完全填满有效空间vbox.Add(b, proport=1, flag=wx.EXPAND|wx.BOTTOM, border=10)#设置面板(panel)采用vbox布局管理器panel.SetSizer(vbox)  #两个控件都放到面板中,所以需要设置面板布局为盒子布局。def on_click(self, event):self.statictext.SetLabelText('Hello, World.')app = wx.App()  #创建应用程序对象
frm = MyFrame()  #创建窗口对象
frm.Show()  #显示窗口
app.MainLoop()  #进入主事件循环

四、控件

1.文本输入控件

#coding=utf-8
import wxclass MyFrame(wx.Frame):def _init_(self):super()._init_(None, title="文本输入控件", size=(300, 260))panel = wx.Panel(parent=self)pc1 = wx.TextCtrl(panel)  #创建普通文本输入控件pc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)  #创建密码输入控件,设置style=wx.TE_PASSWORDpc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)   #创建多行文本输入控件,设置style=wx.TE_MULTILINEuserid = wx.StaticText(panel, label="用户ID:")pwd = wx.StaticText(panel, label="密码:")content = wx.StaticText(panel, label="多行文本:")#创建垂直方向的盒子布局管理器对象vboxvbox = wx.BoxSizer(wx.VERTICAL)#添加控件到vbox布局管理器vbox.Add(userid, flag=wx.EXPAND|wx.LEFT, border=10)vbox.Add(tc1, flag=wx.EXPAND|wx.ALL, border=10)vbox.Add(pwd, flag=wx.EXPAND|wx.LEFT, border=10)vbox.Add(tc2, flag=wx.EXPAND|wx.ALL, border=10)vbox.Add(content, flag=wx.EXPAND|wx.LEFT, border=10)vbox.Add(tc3, flag=wx.EXPAND|wx.LEFT, border=10)#设置面板(panel)采用vbox布局管理器panel.SetSizer(vbox)#设置tc1初始值tc1.SetValue('tony)   #设置文本输入控件的内容#获取tc1值print('读取用户ID:{0}'.format(tc1.GetValue()))
(省略)

2.复选框和单选按钮

#coding=utf-8
import wxclass MyFrame(wx.Frame):def _init_(self):super()._init_(None, title=“复选框和单选按钮", size=(330,120))panel = wx.Panel(parent=self)st1 = wx.StaticText(panel, label='选择你喜欢的编程语言:')#创建单选按钮cb1 = wx.CheckBox(panel, id=1, label='Python')cb2 = wx.CheckBox(panel, id=2, label='Java')cb2.SetValue(True)   #设置cb2初始状态为选中cb3 = wx.CheckBox(panel, id=3, label='C++')self.Bind(wx.EVT_CHECKBOX, self.on_checkbox_click, id=1, id2=3)  #绑定id为1~3所有控件的事情处理到on_checkbox_clickck()方法st2 =wx.StaticText(panel, label='选择性别:')#设置style=wx.RB_GROUP的单选按钮,说明是一个组的开始,直到遇到另外设置style=wx.RB_GROUP的wx.RadioButto单选按钮为止都是同一个组。所以radio1和radio2是同一组,即这两个单选按钮是互斥的radio1 = wx.RadioButton(panel, id=4, label='男', style=wx.RB_GROUP)  radio2 = wx.RadioButton(panel, id=5,label='女')  #创建单选按钮self.Bind(wx.EVT_RADI0BUTTON, self.on_radio1_click, id=4, id2=5)   #绑定id从4~5的控件到on_radiol__click()方法hbox1 = wx.BoxSizer()hbox1.Add(st1, f1ag=wx.LEFT|wx.RIGHT, border=5)hbox1.Add(cb1)hbox1.Add(cb2)hbox1.Add(eb3)hbox2 = wx.BoxSizer()hbox2.Add(st2, flag=wx.LEFT|wx.RIGHT, border=5)hbox2.Add(radio1)hbox2.Add(radio2)vbox =wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox1, flag=wx.ALL, border=10)vbox.Add(hbox2, flag=wx.ALL, border=10)#设置面板Cpanel)采用vbox布局管理器panel.SetSizer(vbox)def on_checkbox_click(self,event):cb = event.GetEventobject()print("选拼{0},状态{1}'.format(cb.GetLabel(), event.IsCecked())) #从事件对象中取出事件源对象(复选框)并获得复选框状态def on_radio1_click(self, event):rb = event.GetEventobject()print("第一组{0}个被选中'.format(rb.GetLabel()))(省略)

3. 列表

#coding=utf-8
import wx
class MyFrame(wx.Frame):def _init_(self):super()._init_(None, title="列表",size=(350, 175))panel = wx.Pane1(parent=self)st1 = wx. StaticText(panel, label='选择你喜欢的编程语言:')list1 = ['Python', 'C++', 'Java']#创建列表控件,参数choices用于设置列表选项;参数style用于设置列表风格样式,wx.LB_SINGLE指单选列表控件:lb1 = wx.ListBox(panel, choices=list1, style=wx.LB_SINGLE)#绑定列表选择事件wx.EVT_LISTBOX到self.on_listbox1()方法:self.Bind(wx.EVT_LISTBox, self.on_listbox1,lb1)  st2 = wx.StaticText(panel,label='选择你喜欢吃的水果:')list2 =['菜果', '橘子', '香蕉']#style=wx.LB_EXTENDED表示创建多选列表控件:lb2 = wx.ListBox(panel, choices=list2, style=wx.LB_EXTENDED)  self.Bind(wx.EVT_LISTBOX, self.on_listbox2,lb2)hbox1 = wx.BoxSizer()hbox1.Add(st1, proportion=1, flag=wx.LEFT|wx.RIGHT, border=5)hbox1.Add(lb1, proportion=1)hbox2 = wx.BoxSizer()hbox2.Add(st2, proportion=1, flag=wx.LEFT|wx.RIGHT, border=5)hbox2.Add(lb2,proportion=1)vbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox1, f1ag=wx.ALL|wx.EXPAND, border=5)vbox.Add(hbox2, flag=wx.ALL|wx.EXPAND, border=5)panel.SetSizer(vbox)def on_listbox1(self, event):listbox = event.GetEventObject()print('选择{0}'.format(listbox.GetSelection()))  #返回单个选中项目的索引序号

4. 静态图片控件

#coding=utf-8
import wxclass MyFrame(wx.Frame):def _init_(self):super()._init_(None, title='静态图片控件', size=(300, 300))#创建一个面板,它是该类的实例变量self.panel = wx.Panel(parent=self)#创建wx.Bitmap图片对象的列表self.bmps = [wx.Bitmap('images/bird5.gif', wx.BITMAP_TYPE_GIF),wx.Bitmap('images/bird4.gif' , wx.BITMAP_TYPE_GIF),wx.Bitmap('images/bird3.gif' , wx.BITMAP_TYPE_GIF)] b1 = wx.Button(self.panel, id=1, label= 'Button1')b2 = wx.Button(self.panel, id=2, label= 'Button2')self.Bind(wx.EVT_BUTTON, self.on_click,id=1, id2=2)#静态图片控件对象,self.bmps[0]是静态图片控件要显示的图片对象self.image = wx.StaticBitmap(self.panel, bitmap=self.bmps[0])#创建垂直方向的布局管理器对象vboxvbox = wx.BoxSizer(wx.VERTICAL)#添加标控件到布局管理器对象vboxvbox.Add(b1, proportion=1, flag=wx.EXPAND)vbox.Add(b2, proportion=1, flag=wx.EXPAND)vbox. Add(self.image. proportion=3. flag=wx.EXPAND)self.panel.SetSizer(vbox)  def on_click(self, event):event_id = event.GetId()if event_id == 1:self.image.SetBitmap(self.bmps[1])  #重新设置图片,实现图片切换else:self.image.SetBitmap(self.bmps[2])self.pane1.Layout()  #重新设置panel面板布局
(省略)

(十二)python图形用户界面相关推荐

  1. 第十二章 图形用户界面

    第十二章 图形用户界面 GUI就是包含按钮.文本框等控件的窗口 Tkinter是事实上的Python标准GUI工具包 创建GUI示例应用程序 初探 导入tkinter import tkinter a ...

  2. python - 啃书 第十二章 图形用户界面编程

    此篇中,介绍的是个第三方库,而该库的书籍,Creating GUI Applications with wxPython Kindle Edition, 358 pages,完全是把一个前端教程缩减到 ...

  3. Python图形用户界面设计-Delphi For Python高级开发教程

    目录 简介........................................................................ 5 谁应该阅读这本教程........... ...

  4. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包

    ,赠送一本"Python相关图书".咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用**Python 3.X版 本书是智捷课堂开发的立体化 ...

  5. Python图形用户界面Tkinter标准色彩颜色背景色大全

    Python图形用户界面Tkinter标准色彩颜色背景色大全 前段时间刚开始学Tkinter,后来想做一个漂亮的GUI界面,但是自己对颜色的词汇储备有限,所以没能顺利完成,今天在网上查了很多信息,做了 ...

  6. Python图形用户界面GUI入门

    阅读文本大概需要 5 分钟. 编程初学者在刚接触编程的时候,都会觉得代码太抽象,学起来太枯燥.如果有图形界面的话,那就不一样了,那就生动很多了. 今天给大家讲讲 Python 的图形用户界面编程,也就 ...

  7. 二十六、图形用户界面

    1984年苹果发布的Macintosh是普通人可以买到的第一台带图形用户界面的计算机.在那个命令行计算机为主的时代里,这是一个革命性的产品.图形用户界面是一个"选择并点击"(poi ...

  8. Python图形用户界面

    目录 1.图形用户界面概述 1.1tkinter 2.tkinter概述 2.1tkinter模块 2.2图形用户界面的构成 2.3框架和GUI应用程序类 2.4tkinter主窗口 3几何布局管理器 ...

  9. python图形用户界面编程

    学习目标: 1.使用tkinter基本组件,更改GUI样式   2.掌握事件处理方式,菜单,消息对话框 3.熟悉几何布局管理器 4.了解图形用户界面,图形用户界面开发工具 前言 通过窗口来与用户进行交 ...

最新文章

  1. Vm-Tools 安装指南
  2. 【Node.js学习小案例】DNS域名解析 一
  3. 创业——不可忽视的创业计划书!!!
  4. 7、ReadWriteLock
  5. [转贴]IT外包服务商如何构建高效率的服务台运营机制
  6. VMware linux 克隆机的配置
  7. Django redis的使用
  8. python常用的绘图库_Python3绘图库Matplotlib(01)
  9. Qt Widgets——子区域和子窗口
  10. vmware安装macos
  11. DWG格式怎样转换成DXF、DWF格式呢?
  12. Java中取多个集合的交集——retainAll()
  13. CentOS 7.6 安装 Sentaurus 2017.09 记录
  14. java解压jar包的方法_Java 打包成jar包 和 解压jar包
  15. Python爬虫编程思想(69): 项目实战--抓取当当图书排行榜
  16. Mac下的平铺式桌面 - Yabai
  17. Visual Studio 2005键盘锁定
  18. jsp+tomcat+mysql+sevlet+javabean配置过程
  19. 盘点行业 洞察大势 挥斥方遒 指点江山 洞见2018中国HR服务峰会惊艳业界
  20. 2021年雄安新区发展研究报告

热门文章

  1. Ubuntu 安装Jdk1.8
  2. android 返回按钮 黑色,安卓推送10.0,取消返回键,增设暗黑模式,这些改变你知道吗?...
  3. scrapy爬取海贼王漫画
  4. 在线教育系统源码讲解与代码分析
  5. CDSN文章下载代码
  6. 冒险岛2乐器制作详细方法
  7. 把N1打造成高效能的多平台游戏机
  8. 图片处理-图片在计算机的显示
  9. Oracle 将多列合并成一列
  10. FFmpeg获取视频帧率fps,tbr