Python四款GUI图形界面库介绍


Posted in Python onJune 05, 2022

一、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()  # 进入消息循环

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

Python四款GUI图形界面库介绍

二、三方库: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已经正常工作啦。

Python四款GUI图形界面库介绍

2、QtDesigner

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

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

用户安装PyQt5后,系统会默认安装QtDesigner工具。

QtDesigner的默认默认路径: C:\python\python\Lib\site-packages\PyQt5\designer.exe

安装PyQt5-tools

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

pip install PyQt5-tools

3、配置PyCharm

打开Pycharm,然后按照下面路径打开Extrernal Tools:

File->设置->Tools->Extrernal Tools->点击“+”号->弹出对话框,配置如下:

Python四款GUI图形界面库介绍

(1).增加QT设计界面“Qt Designer” —— 这个就是设计Qt界面的工具

  • Program选择PyQt安装目录中 designer.exe 的路径
  • Work directory 使用变量 $ProjectFileDir$ (点击后面的…)

Python四款GUI图形界面库介绍

(2).增加“PyUIC” ——这个主要是用来将 Qt界面 转换成 py代码

  • Program选择PyQt安装目录中 pyuic5.bat 的路径
  • parameters设置为$FileName$ -o $FileNameWithoutExtension$.py
  • Work directory 设置为 $ProjectFileDir$ (点击后面的…)

Python四款GUI图形界面库介绍

工具建立成功后返回ExternalTools界面,如下:

Python四款GUI图形界面库介绍

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

Python四款GUI图形界面库介绍

4、使用PyQt

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

Python四款GUI图形界面库介绍

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

可以把 C:\Users\bobin.yang\PycharmProjects\untitled\venv\Lib\site-packages\pyqt5_tools\Qt\plugins\platforms 目录的qwindows.dll拷贝到

C:\Users\bobin.yang\PycharmProjects\untitled\venv\Lib\site-packages\pyqt5_tools\Qt\bin\platforms 目录里, 或者直接覆盖原来的文件。

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

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

Python四款GUI图形界面库介绍

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

Python四款GUI图形界面库介绍

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

Python四款GUI图形界面库介绍

# -*- 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_())

执行结果

Python四款GUI图形界面库介绍

三、三方库:wxPython

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

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

四、三方库:PyGTK

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

到此这篇关于Python图形界面库的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Python加载带有注释的Json文件实例
May 23 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
python调用staf自动化框架的方法
Dec 26 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
Python序列化模块JSON与Pickle
Jun 05 #Python
python 判断字符串当中是否包含字符(str.contain)
Python测试框架pytest高阶用法全面详解
Python使用Web框架Flask开发项目
Jun 01 #Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 #Python
 python中的元类metaclass详情
May 30 #Python
Python自动化实战之接口请求的实现
You might like
深入php数据采集的详解
2013/06/02 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
详解C++编程中一元运算符的重载
2016/01/19 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
英国名牌男装店:Standout
2021/02/17 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
中国梦演讲稿3分钟
2014/08/19 职场文书
财务人员个人工作总结
2015/02/27 职场文书
公司行政管理制度范本
2015/08/05 职场文书
Docker下安装Oracle19c
2022/04/13 Servers