Python四款GUI圖形界面庫介紹
一、Python官方標(biāo)準(zhǔn)庫:Tkinter (必須了解)
Python內(nèi)置圖形界面庫——Tkinter。
Tkinter 模塊(Tk 接口)是 Python 的標(biāo)準(zhǔn) Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數(shù)的 Unix 平臺下使用,同樣可以應(yīng)用在 Windows 和 Macintosh 系統(tǒng)里。Tk8.0 的后續(xù)版本可以實現(xiàn)本地窗口風(fēng)格,并良好地運行在絕大多數(shù)平臺中。
用法:
Tkinter的提供各種控件,如按鈕,標(biāo)簽和文本框,一個GUI應(yīng)用程序中使用。這些控件通常被稱為控件或者部件。
目前有15種Tkinter的部件。我們提出這些部件以及一個簡短的介紹。
- Button 按鈕控件;在程序中顯示按鈕。
- Frame 框架控件;在屏幕上顯示一個矩形區(qū)域,多用來作為容器
- Label 標(biāo)簽控件;可以顯示文本和位圖
- Menubutton 菜單按鈕控件,由于顯示菜單項。
- Menu 菜單控件;顯示菜單欄,下拉菜單和彈出菜單
- Message 消息控件;用來顯示多行文本,與label比較類似
- Scrollbar 滾動條控件,當(dāng)內(nèi)容超過可視化區(qū)域時使用,如列表框。.
- Text 文本控件;用于顯示多行文本
- tkMessageBox 用于顯示你應(yīng)用程序的消息框。
- Canvas 畫布控件;顯示圖形元素如線條或文本
- Checkbutton 多選框控件;用于在程序中提供多項選擇框
- Entry 輸入控件;用于顯示簡單的文本內(nèi)容
- Listbox 列表框控件;在Listbox窗口小部件是用來顯示一個字符串列表給用戶
- Radiobutton 單選按鈕控件;顯示一個單選的按鈕狀態(tài)
- Scale 范圍控件;顯示一個數(shù)值刻度,為輸出限定范圍的數(shù)字區(qū)間
- Toplevel 容器控件;用來提供一個單獨的對話框,和Frame比較類似
- Spinbox 輸入控件;與Entry類似,但是可以指定輸入范圍值
- PanedWindow PanedWindow是一個窗口布局管理的插件,可以包含一個或者多個子控件。
- LabelFrame labelframe 是一個簡單的容器控件。常用與復(fù)雜的窗口布局。
標(biāo)準(zhǔn)屬性
標(biāo)準(zhǔn)屬性也就是所有控件的共同屬性,如大小,字體和顏色等等。
- Dimension:控件大?。?/li>
- Color:控件顏色;
- Font:控件字體;
- Anchor:錨點;
- Relief:控件樣式;
- Bitmap:位圖;
- Cursor:光標(biāo);
幾何管理
Tkinter控件有特定的幾何狀態(tài)管理方法,管理整個控件區(qū)域組織,一下是Tkinter公開的幾何管理類:包、網(wǎng)格、位置
- pack():包裝;
- grid():網(wǎng)格;
- place():位置;
由于 Tkinter 是內(nèi)置到 python 的安裝包中、只要安裝好 Python 之后就能 import Tkinter 庫、而且 IDLE 也是用 Tkinter 編寫而成、對于簡單的圖形界面 Tkinter 還是能應(yīng)付自如。
注意:Python3.x 版本使用的庫名為 tkinter,即首寫字母 T 為小寫。
import tkinter
創(chuàng)建一個GUI程序
- 1、導(dǎo)入 Tkinter 模塊
- 2、創(chuàng)建控件
- 3、指定這個控件的 master, 即這個控件屬于哪一個
- 4、告訴 GM(geometry manager) 有一個控件產(chǎn)生了。
實例
from tkinter import * # 導(dǎo)入 Tkinter 庫
root = Tk() # 創(chuàng)建窗口對象的背景色
# 創(chuàng)建兩個列表
li = ['C', 'python', 'php', 'html', 'SQL', 'java']
movie = ['CSS', 'jQuery', 'Bootstrap']
listb = Listbox(root) # 創(chuàng)建兩個列表組件
listb2 = Listbox(root)
for item in li: # 第一個小部件插入數(shù)據(jù)
listb.insert(0, item)
for item in movie: # 第二個小部件插入數(shù)據(jù)
listb2.insert(0, item)
listb.pack() # 將小部件放置到主窗口中
listb2.pack()
root.mainloop() # 進入消息循環(huán)以上代碼執(zhí)行結(jié)果如下圖:

二、三方庫:PyQt5(推薦,但是還是累)
pyqt5是一套Python綁定Digia QT5應(yīng)用的框架。它可用于Python 2和3。Qt庫是最強大的GUI庫之一。Qt強大之處在于網(wǎng)上有很多pyqt的資源,而且qt技術(shù)已經(jīng)相當(dāng)成熟,pyqt是采用基本和qt一致的api,因此之前使用過qt的人,轉(zhuǎn)移到pyqt很容易.
pyqt5做為Python的一個模塊,它有620多個類和6000個函數(shù)和方法。這是一個跨平臺的工具包,它可以運行在所有主要的操作系統(tǒng),包括UNIX,Windows,Mac OS。pyqt5是雙重許可。開發(fā)者可以在GPL和商業(yè)許可之間進行選擇。
常用模塊
- QtCore:包含了核心的非GUI功能。此模塊用于處理時間、文件和目錄、各種數(shù)據(jù)類型、流、URL、MIME類型、線程或進程。
- QtGui:包含類窗口系統(tǒng)集成、事件處理、二維圖形、基本成像、字體和文本。
- Qtwidgets:包含創(chuàng)造經(jīng)典桌面風(fēng)格的用戶界面提供了一套UI元素的類。
- QtMultimedia:包含的類來處理多媒體內(nèi)容和API來訪問相機和收音機的功能。
- Qtwebsockets:包含實現(xiàn)WebSocket協(xié)議類。
- QtWebKit:包含一個基于Webkit2圖書館Web瀏覽器實現(xiàn)類。
- Qtwebkitwidgets:包含的類的基礎(chǔ)webkit1一用于qtwidgets應(yīng)用Web瀏覽器的實現(xiàn)。
- QtXml:包含與XML文件的類。這個模塊為SAX和DOM API提供了實現(xiàn)。
- QtSql:提供操作數(shù)據(jù)庫的類。
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已經(jīng)正常工作啦。

2、QtDesigner
QT給我們帶來最方便的好處,就是它有一個QT Desiginer,這個設(shè)計器可以方便我們進行頁面的布局,可以說在Tkinter里面需要一坨坨的代碼完成的頁面布局,在QT里面只要拖一拖控件就搞定了。
Qtdesigner是Python設(shè)計里面一個非常實用的工具,使得人們編寫qt界面可以不僅僅是使用純代碼,而可以在可視化的基礎(chǔ)上設(shè)置,非常方便。
用戶安裝PyQt5后,系統(tǒng)會默認安裝QtDesigner工具。
QtDesigner的默認默認路徑: C:\python\python\Lib\site-packages\PyQt5\designer.exe
安裝PyQt5-tools
Python環(huán)境需要安裝designer。 在終端執(zhí)行pip命令安裝完P(guān)yQt5-tools。
pip install PyQt5-tools
3、配置PyCharm
打開Pycharm,然后按照下面路徑打開Extrernal Tools:
File->設(shè)置->Tools->Extrernal Tools->點擊“+”號->彈出對話框,配置如下:

(1).增加QT設(shè)計界面“Qt Designer” —— 這個就是設(shè)計Qt界面的工具
- Program選擇PyQt安裝目錄中 designer.exe 的路徑
- Work directory 使用變量 $ProjectFileDir$ (點擊后面的…)

(2).增加“PyUIC” ——這個主要是用來將 Qt界面 轉(zhuǎn)換成 py代碼
- Program選擇PyQt安裝目錄中 pyuic5.bat 的路徑
- parameters設(shè)置為$FileName$ -o $FileNameWithoutExtension$.py
- Work directory 設(shè)置為 $ProjectFileDir$ (點擊后面的…)

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

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

4、使用PyQt
1、點擊QtDesigner工具,彈出設(shè)計器窗口:

如果打開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文件到項目文件夾下。

3、返回PyCharm 項目界面,項目列表下多出了這個.ui文件

把制作好的ui文件打開后,選擇pyuic即可轉(zhuǎn)換為*.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、調(diào)用方式
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_())執(zhí)行結(jié)果

三、三方庫:wxPython
wxPython 是一款開源軟件,是 Python 語言的一套優(yōu)秀的 GUI 圖形庫,允許 Python 程序員很方便的創(chuàng)建完整的、功能健全的 GUI 用戶界面。
wxPython是免費的,源代碼是開放的,允許其應(yīng)用在商業(yè)產(chǎn)品上,你可以免費使用它和共享它。同時,它也提供類似QT Designer的設(shè)計器wxFormbuilder??梢哉f他就是個壓縮版的QT,但是該有的功能卻完全不缺失。
四、三方庫:PyGTK
PyGTK 讓你用 Python 輕松創(chuàng)建具有圖形用戶界面的程序.底層的 GTK+提供了各 式的可視元素和功能,如果需要,你能開發(fā)在 GNOME 桌面系統(tǒng)運行的功能完整 的軟件。PyGTK 真正具有跨平臺性,它能不加修改地,穩(wěn)定運行各種操作系統(tǒng)之 上,如 Linux,Windows,MacOS 等.除了簡單易用和快速的原型開發(fā)能力外,PyGTK還有一流的處理本地化語言的獨特功。
到此這篇關(guān)于Python圖形界面庫的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python兩個整數(shù)相除得到浮點數(shù)值的方法
這篇文章主要介紹了Python兩個整數(shù)相除得到浮點數(shù)值的方法,本文直接給出代碼示例,需要的朋友可以參考下2015-03-03
PyTorch詳解經(jīng)典網(wǎng)絡(luò)ResNet實現(xiàn)流程
ResNet全稱residual neural network,主要是解決過深的網(wǎng)絡(luò)帶來的梯度彌散,梯度爆炸,網(wǎng)絡(luò)退化(即網(wǎng)絡(luò)層數(shù)越深時,在數(shù)據(jù)集上表現(xiàn)的性能卻越差)的問題2022-05-05
C# DataGridView行列轉(zhuǎn)換的具體實現(xiàn)
本文主要介紹了C# DataGridView行列轉(zhuǎn)換的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

