一口气看完——PythonGUI界面编程入门到实战项目-程序员宅基地

技术标签: PythonGUI  自学Python  GUI界面  Python  

 

1、概念

GUI是图形用户界面的缩写。用户不仅可以输入文返回文字,用户还可以看到窗口、按钮、文字框等图形,还可以用鼠标点击,也可以用键盘输入。到目前为止,我们的程序都是命令行或文字模式程序。GUI是一种不同于程序的交互方式。

2、基本要素

输入、处理和输出。

3、实现的模块

(1)Tkinter:

Tkinter模块(Tk接口)是Python标准TkGUI包的接口。Tk和Tkinter可以在大多数Unix平台下使用,也可以应用于Windows和Macintosh系统。Tk8.0的后续版本可以实现本地口风格,在绝大多数平台上运行良好。

(2)wxPython

wxPython是开源软件,是Python语言的优秀GUI图形库,Python程序员可以简单地创建完整、功能键的GUI用户界面。

(3)Jython

Jython程序可与Java无缝融合。除了一些标准模块,Jython还使用Java模块。Jython几乎有标准的Python不依赖c语言的所有模块。例如,Jython的用户界面使用Swing、AWT或SWT。Jython可以动态或静态地编译成Java字节代码。

以上就是python GUI的介绍,相信大家对图形类的知识点还是比较感兴趣的,也可以结合以往所学的模块深入学习。

教程推荐:2022PythonGUI详解【附源码】

Python四款GUI图形界面库介绍

一、python官方标准库:tkinter (必须了解)

python内置图形界面库——tkinter。

tkinter 模块(tk 接口)是 python 的标准 tk gui 工具包的接口 .tk 和 tkinter 可以在大多数的 unix 平台下使用,同样可以应用在 windows 和 macintosh 系统里。tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

用法:

tkinter的提供各种控件,如按钮,标签和文本框,一个gui应用程序中使用。这些控件通常被称为控件或者部件。

目前有15种tkinter的部件。我们提出这些部件以及一个简短的介绍。

  • button 按钮控件;在程序中显示按钮。
  • frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
  • label 标签控件;可以显示文本和位图
  • menubutton 菜单按钮控件,由于显示菜单项。
  • menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
  • message 消息控件;用来显示多行文本,与label比较类似
  • scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
  • text 文本控件;用于显示多行文本
  • tkmessagebox 用于显示你应用程序的消息框。
  • canvas 画布控件;显示图形元素如线条或文本
  • checkbutton 多选框控件;用于在程序中提供多项选择框
  • entry 输入控件;用于显示简单的文本内容
  • listbox 列表框控件;在listbox窗口小部件是用来显示一个字符串列表给用户
  • radiobutton 单选按钮控件;显示一个单选的按钮状态
  • scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
  • toplevel 容器控件;用来提供一个单独的对话框,和frame比较类似
  • spinbox 输入控件;与entry类似,但是可以指定输入范围值
  • panedwindow panedwindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
  • labelframe labelframe 是一个简单的容器控件。常用与复杂的窗口布局。

标准属性

标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。

  • dimension:控件大小;
  • color:控件颜色;
  • font:控件字体;
  • anchor:锚点;
  • relief:控件样式;
  • bitmap:位图;
  • cursor:光标;

几何管理

tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是tkinter公开的几何管理类:包、网格、位置

  • pack():包装;
  • grid():网格;
  • place():位置;

由于 tkinter 是内置到 python 的安装包中、只要安装好 python 之后就能 import tkinter 库、而且 idle 也是用 tkinter 编写而成、对于简单的图形界面 tkinter 还是能应付自如。

注意:python3.x 版本使用的库名为 tkinter,即首写字母 t 为小写。

 

import tkinter

 

创建一个gui程序

  • 1、导入 tkinter 模块
  • 2、创建控件
  • 3、指定这个控件的 master, 即这个控件属于哪一个
  • 4、告诉 gm(geometry manager) 有一个控件产生了。

实例

from tkinter import *  # 导入 tkinter 库    root = tk()  # 创建窗口对象的背景色  # 创建两个列表  li = ['c', 'python', 'php', 'html', 'sql', 'java']  movie = ['css', 'jquery', 'bootstrap']  listb = listbox(root)  # 创建两个列表组件  listb2 = listbox(root)  for item in li:  # 第一个小部件插入数据      listb.insert(0, item)    for item in movie:  # 第二个小部件插入数据      listb2.insert(0, item)    listb.pack()  # 将小部件放置到主窗口中  listb2.pack()  root.mainloop()  # 进入消息循环

 

以上代码执行结果如下图:

二、三方库:pyqt5(推荐,但是还是累)

pyqt5是一套python绑定digia qt5应用的框架。它可用于python 2和3。qt库是最强大的gui库之一。qt强大之处在于网上有很多pyqt的资源,而且qt技术已经相当成熟,pyqt是采用基本和qt一致的api,因此之前使用过qt的人,转移到pyqt很容易.

pyqt5做为python的一个模块,它有620多个类和6000个函数和方法。这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括unix,windows,mac os。pyqt5是双重许可。开发者可以在gpl和商业许可之间进行选择。

常用模块

  • qtcore:包含了核心的非gui功能。此模块用于处理时间、文件和目录、各种数据类型、流、url、mime类型、线程或进程。
  • qtgui:包含类窗口系统集成、事件处理、二维图形、基本成像、字体和文本。
  • qtwidgets:包含创造经典桌面风格的用户界面提供了一套ui元素的类。
  • qtmultimedia:包含的类来处理多媒体内容和api来访问相机和收音机的功能。
  • qtwebsockets:包含实现websocket协议类。
  • qtwebkit:包含一个基于webkit2图书馆web浏览器实现类。
  • qtwebkitwidgets:包含的类的基础webkit1一用于qtwidgets应用web浏览器的实现。
  • qtxml:包含与xml文件的类。这个模块为sax和dom api提供了实现。
  • qtsql:提供操作数据库的类。

1、安装:

pip install pyqt5

测试

import sys    from pyqt5 import qtwidgets, qtcore    app = qtwidgets.qapplication(sys.argv)  widget = qtwidgets.qwidget()  widget.resize(400, 100)  widget.setwindowtitle("this is a demo for pyqt widget.")  widget.show()    exit(app.exec_())

运行后弹出如下界面,表示pyqt已经正常工作啦。

2、qtdesigner

qt给我们带来最方便的好处,就是它有一个qt desiginer,这个设计器可以方便我们进行页面的布局,可以说在tkinter里面需要一坨坨的代码完成的页面布局,在qt里面只要拖一拖控件就搞定了。

qtdesigner是python设计里面一个非常实用的工具,使得人们编写qt界面可以不仅仅是使用纯代码,而可以在可视化的基础上设置,非常方便。

用户安装pyqt5后,系统会默认安装qtdesigner工具。

qtdesigner的默认默认路径: c:pythonpythonlibsite-packagespyqt5designer.exe

安装pyqt5-tools

python环境需要安装designer。 在终端执行pip命令安装完pyqt5-tools。

pip install pyqt5-tools

3、配置pycharm

打开pycharm,然后按照下面路径打开extrernal tools:

file->设置->tools->extrernal tools->点击“+”号->弹出对话框,配置如下:

(1).增加qt设计界面“qt designer” —

— 这个就是设计qt界面的工具

  • program选择pyqt安装目录中 designer.exe 的路径
  • work directory 使用变量 $projectfiledir$ (点击后面的…)
  • (2).增加“pyuic” ——这个主要是用来将 qt界面 转换成 py代码

  • program选择pyqt安装目录中 pyuic5.bat 的路径
  • parameters设置为$filename$ -o $filenamewithoutextension$.py
  • work directory 设置为 $projectfiledir$ (点击后面的…)
  • 工具建立成功后返回externaltools界面,如下:

    可以在tools里面看到我们的工具

     

    4、使用pyqt

    1、点击qtdesigner工具,弹出设计器窗口:

    如果打开qt designer 时,提示this application failed to start because no qt platform plugin could be:

    可以把 c:usersbobin.yangpycharmprojectsuntitledvenvlibsite-packagespyqt5_toolsqtpluginsplatforms 目录的qwindows.dll拷贝到

    c:usersbobin.yangpycharmprojectsuntitledvenvlibsite-packagespyqt5_toolsqtbinplatforms 目录里, 或者直接覆盖原来的文件。

    注意:两个文件, 正确的文件大小 1.42m, 错误文件大小38k。

    2、制作窗体,另存该界面为untitled.ui文件到项目文件夹下。

 

3、返回pycharm 项目界面,项目列表下多出了这个.ui文件

把制作好的ui文件打开后,选择pyuic即可转换为*.py文件

 

# -*- coding: utf-8 -*-    # form implementation generated from reading ui file 'untitled.ui'  #  # created by: pyqt5 ui code generator 5.15.0  #  # warning: any manual changes made to this file will be lost when pyuic5 is  # run again.  do not edit this file unless you know what you are doing.      from pyqt5 import qtcore, qtgui, qtwidgets      class ui_mainwindow(object):      def setupui(self, mainwindow):          mainwindow.setobjectname("mainwindow")          mainwindow.resize(800, 600)          self.centralwidget = qtwidgets.qwidget(mainwindow)          self.centralwidget.setobjectname("centralwidget")          self.pushbutton = qtwidgets.qpushbutton(self.centralwidget)          self.pushbutton.setgeometry(qtcore.qrect(320, 310, 93, 28))          self.pushbutton.setobjectname("pushbutton")          mainwindow.setcentralwidget(self.centralwidget)          self.menubar = qtwidgets.qmenubar(mainwindow)          self.menubar.setgeometry(qtcore.qrect(0, 0, 800, 25))          self.menubar.setobjectname("menubar")          mainwindow.setmenubar(self.menubar)          self.statusbar = qtwidgets.qstatusbar(mainwindow)          self.statusbar.setobjectname("statusbar")          mainwindow.setstatusbar(self.statusbar)            self.retranslateui(mainwindow)          qtcore.qmetaobject.connectslotsbyname(mainwindow)        def retranslateui(self, mainwindow):          _translate = qtcore.qcoreapplication.translate          mainwindow.setwindowtitle(_translate("mainwindow", "mainwindow"))          self.pushbutton.settext(_translate("mainwindow", "pushbutton"))

 4、调用方式

import sys  import untitled  from pyqt5 import qtwidgets    if __name__ == "__main__":      app = qtwidgets.qapplication(sys.argv)      widget = qtwidgets.qmainwindow()      ui = untitled.ui_mainwindow()      ui.setupui(widget)      widget.show()      sys.exit(app.exec_())

 

执行结果

 

三、三方库:wxpython

wxpython 是一款开源软件,是 python 语言的一套优秀的 gui 图形库,允许 python 程序员很方便的创建完整的、功能健全的 gui 用户界面。

wxpython是免费的,源代码是开放的,允许其应用在商业产品上,你可以免费使用它和共享它。同时,它也提供类似qt designer的设计器wxformbuilder。可以说他就是个压缩版的qt,但是该有的功能却完全不缺失。

四、三方库:pygtk

pygtk 让你用 python 轻松创建具有图形用户界面的程序.底层的 gtk+提供了各 式的可视元素和功能,如果需要,你能开发在 gnome 桌面系统运行的功能完整 的软件。pygtk 真正具有跨平台性,它能不加修改地,稳定运行各种操作系统之 上,如 linux,windows,macos 等.除了简单易用和快速的原型开发能力外,pygtk还有一流的处理本地化语言的独特功。

到此这篇关于python图形界面库的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支支持<IT就自学>

更多编程学习干货,记得持续关注我哦~

适合初学者学习的PythonGUI教程学习点这里——2022PythonGUI详解【附源码】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wshyb0314/article/details/127916084

智能推荐

Navicat建模的选项 无、唯一、多个、一或多个、零或一个、零或多个,什么是外键的基数?_navicat 模型 基数在-程序员宅基地

文章浏览阅读5.8w次,点赞3次,收藏8次。首先填写一张图,希望对你有帮助 看到图片上那些和是不是蒙圈了呢?本人刚开始的时候也是很懵圈的(原因是在我司开发人员也不是很很注意,明早开早会看来我的=得强调一下这个问题啊)废话不多说,我们着重分析user与dingdan表,两者是典型的一对多关系,那么dingdan是多方,user是一方。所以,你看懂了吗?dingdan是三个叉叉叉,user是一个叉...._navicat 模型 基数在

webView加载页面空白的解决方法_wpf webview2页面空白-程序员宅基地

文章浏览阅读5.9k次。错误提示:E/chromium: [ERROR:interface_registry.cc(104)] Failed to locate a binder for interface: autofill::mojom::PasswordManagerDriver原因和解决方案:1、检查是否有权限<uses-permission android:name="android.per..._wpf webview2页面空白

如何获取流媒体实时流的测试链接_流媒体地址怎么获取-程序员宅基地

文章浏览阅读5k次。获取流媒体URL大致分为以下步骤例如从优酷获取在浏览器中打开优酷网页http://www.youku.com,并点击直播标签点击直播标签随便挑选一个实时的直播按住F12进入开发者模式打开VLC将获取到的URL链接填上,进行验证转载请注明出处:http://www.wolfnx.com/2017/08/11/StreamingSourceAcces..._流媒体地址怎么获取

CentOS8 与 CentOS7 的区别_centos 8-程序员宅基地

文章浏览阅读2.9w次,点赞19次,收藏50次。CentOS8 与 CentOS7 的区别。_centos 8

NLP(3): 问答系统介绍,文本处理流程_nlp知识库问答判断输入内容是否在知识库中-程序员宅基地

文章浏览阅读691次。1、P vs NP vs NP Hard vs NP Complete按照时间复杂度将问题分类 ,p是常数多项式复杂度 O(p^n) :不可以解决的问题,归类于NP Hard/Np Complete1、对于小型的问题,仍然可以采用NP: 可以在多项式复杂度内可以verify的,给定一个解,判断这个解是不是想要的。评估解的过程只需要多项式复杂度,是个判断过程。2、approximate algorithm:不保证获得精确的解- 提出近似算法- 指出时间复杂度多少- 给出近似算法最后给出_nlp知识库问答判断输入内容是否在知识库中

使用HTTPD做内部访问转向-程序员宅基地

文章浏览阅读235次。#使用HTTPD做内部访问转向 1.添加二级域名解析,并能成功ping通 2.安装httpd服务 yum install httpdyum install httpd-devel.x86_64 3.修改httpd的配置文件 cd /etc/httpd/confvim http..._httpd内部访问的例子

随便推点

html如何使用mysql数据库_html怎么连接数据库-程序员宅基地

文章浏览阅读2.3w次,点赞7次,收藏80次。html里怎么用javascript连接数据库CSS布局HTML小编今天和大家分享助,要代码理论上是不要这么做的 javascript代码会暴露给客户端 你的数据库地址 帐号 密码都会暴露 建议采取用动态语言读取数据库 比如 asp php jsp asp.net等都可以 然后用javascript 去提交参数给动态页面,也就是所谓的ajax的方式.html怎么和数据库连接?方法和详细的操作步骤如..._html连接mysql数据库

React使用技巧总结 <一>_react{}使用-程序员宅基地

文章浏览阅读1.8k次。1. 当渲染的只有一个目标元素的时候可以直接省去 returnfunction FormList({ color = 'blue', text = 'Confirm'}) { return( {text} )}const FormList_react{}使用

VC6.0中使用ADO操作Access数据库_vc 6.0 用 ado 连接 access 数据库-程序员宅基地

文章浏览阅读749次。这个版本比原先发的要更加全面一些,以下的代码均经过验证。准备:(1)、引入ADO类#import "c:/program files/common files/system/ado/msado15.dll" /no_namespace /rename ("EOF", "adoEOF")(2)、初始化COM在MFC中可以用AfxOleInit();非MFC环境中用:CoInitialize(NULL);_vc 6.0 用 ado 连接 access 数据库

iOS图片处理之涂抹马赛克解析_ios 开发给图片涂抹-程序员宅基地

文章浏览阅读5.4k次。涂抹马赛克跟前一篇介绍的背景虚化 原理是一样的实现原理,由上到下分三层,最下面一层为原图3- 遮罩层(涂抹绘制层)2- 原图马赛克后的效果图1- 原图涂抹的时候,如果不需要画笔带有羽化效果,则可以使用CAShapeLayer来绘制路径,CAShapeLayer绘制的好处是效率高,占用内存少;如果需要画笔当有一定羽化效果,则可以在重绘的时候带上阴影,用阴影来模_ios 开发给图片涂抹

logback + logstash + elasticsearch 7.3.2 + kibana ELK安装部署成功,可以实时搜索日志_java中logstash7.3 兼容什么服务端elk版本-程序员宅基地

文章浏览阅读410次。SpringBoot用的是2.1.12版本,采用了Spring Cloud Alibaba架构。网上找的开源微服务框架,但es版本是6.3,与现有版本7.3.2不兼容,没办法,升级。先说一下以前写日志的方法,根本不规范,有的用slf4j的log.INFO方法,有的用SOPL,这个必须要统一,把所有的System.out.println用log.INFO替换,并且去掉用加号拼字符串的方法,统一用{}优化。框架对日志的集成还是比较好的,有线程的log-spring-boot-starter工程,也写_java中logstash7.3 兼容什么服务端elk版本

【云台】开源版本SimpleBGC的电机驱动与控制方式_计算云台电机零点偏移-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏17次。上面的图是单相的 SPWM 信号,电机中的三相线一般是用 U,V,W 或 A,B,C 来表示。最近想学习一下云台,发现资料确实还不太好找,比较有参考价值的是俄版的开源版本的云台代码,后面就不开源了,开源版本的是比较原始的算法,差不多是玩具级别的,不过还是决定学习一下,了解一下基础。云台的功能是要通过调整电机的机械角度来达到相应的姿态角,如果说通过校准,得到电角度与机械角度的偏移量,或者电角度与姿态角度的偏移量,会非常的麻烦,而且容易出错,的方式来控制三相无刷电机,并且为节省成本,直接使用的。_计算云台电机零点偏移

推荐文章

热门文章

相关标签