Python(00):GUI庫的選擇




一、Python官方標准庫:Tkinter (必須了解)

Python內置圖形界面庫——Tkinter。

    Tkinter 模塊(Tk 接口)是 Python 的標准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數的 Unix 平台下使用,同樣可以應用在 Windows 和 Macintosh 系統里。Tk8.0 的后續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。

    用法:

    Tkinter的提供各種控件,如按鈕,標簽和文本框,一個GUI應用程序中使用。這些控件通常被稱為控件或者部件。

    目前有15種Tkinter的部件。我們提出這些部件以及一個簡短的介紹。

    1. Button 按鈕控件;在程序中顯示按鈕。
    2. Frame 框架控件;在屏幕上顯示一個矩形區域,多用來作為容器
    3. Label 標簽控件;可以顯示文本和位圖
    4. Menubutton 菜單按鈕控件,由於顯示菜單項。
    5. Menu 菜單控件;顯示菜單欄,下拉菜單和彈出菜單
    6. Message 消息控件;用來顯示多行文本,與label比較類似
    7. Scrollbar 滾動條控件,當內容超過可視化區域時使用,如列表框。.
    8. Text 文本控件;用於顯示多行文本
    9. tkMessageBox 用於顯示你應用程序的消息框。
    10. Canvas 畫布控件;顯示圖形元素如線條或文本
    11. Checkbutton 多選框控件;用於在程序中提供多項選擇框
    12. Entry 輸入控件;用於顯示簡單的文本內容
    13. Listbox 列表框控件;在Listbox窗口小部件是用來顯示一個字符串列表給用戶
    14. Radiobutton 單選按鈕控件;顯示一個單選的按鈕狀態
    15. Scale 范圍控件;顯示一個數值刻度,為輸出限定范圍的數字區間
    16. Toplevel 容器控件;用來提供一個單獨的對話框,和Frame比較類似
    17. Spinbox 輸入控件;與Entry類似,但是可以指定輸入范圍值
    18. PanedWindow PanedWindow是一個窗口布局管理的插件,可以包含一個或者多個子控件。
    19. 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()  # 進入消息循環

    以上代碼執行結果如下圖:

    image

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

    image

    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->點擊“+”號->彈出對話框,配置如下:

    image

    (1).增加QT設計界面“Qt Designer” —— 這個就是設計Qt界面的工具

    • Program選擇PyQt安裝目錄中 designer.exe 的路徑
    • Work directory 使用變量 $ProjectFileDir$ (點擊后面的…)

    image

    (2).增加“PyUIC” ——這個主要是用來將 Qt界面 轉換成 py代碼

    • Program選擇PyQt安裝目錄中 pyuic5.bat 的路徑
    • parameters設置為$FileName$ -o $FileNameWithoutExtension$.py
    • Work directory 設置為 $ProjectFileDir$ (點擊后面的…)

    image

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

    image

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

    image

    4、使用PyQt

    1、點擊QtDesigner工具,彈出設計器窗口:

    image

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

    image

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

    把制作好的ui文件打開后,選擇pyuic即可轉換為*.py文件

    image

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

    執行結果

    image

    三 、三方庫:wxPython

    wxPython 是一款開源軟件,是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程序員很方便的創建完整的、功能健全的 GUI 用戶界面。

    wxPython是免費的,源代碼是開放的,允許其應用在商業產品上,你可以免費使用它和共享它。同時,它也提供類似QT Designer的設計器wxFormbuilder。可以說他就是個壓縮版的QT,但是該有的功能卻完全不缺失。

    四、三方庫:PyGTK

    PyGTK 讓你用 Python 輕松創建具有圖形用戶界面的程序.底層的 GTK+提供了各 式的可視元素和功能,如果需要,你能開發在 GNOME 桌面系統運行的功能完整 的軟件。PyGTK 真正具有跨平台性,它能不加修改地,穩定運行各種操作系統之 上,如 Linux,Windows,MacOS 等.除了簡單易用和快速的原型開發能力外,PyGTK還有一流的處理本地化語言的獨特功。


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM