一、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:\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->點擊“+”號->彈出對話框,配置如下:
(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:\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。
制作窗體,另存該界面為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還有一流的處理本地化語言的獨特功。