PyQt5案例彙總(簡潔版)

victorfengming發表於2021-03-02

:stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye:

01選單欄

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon

class Example(QMainWindow):

 def __init__(self): super().__init__() self.initUI()
 def initUI(self):
 exitAct = QAction(QIcon('exit.png'), '&Exit', self) exitAct.setShortcut('Ctrl+Q') exitAct.setStatusTip('Exit application') exitAct.triggered.connect(qApp.quit)
 self.statusBar()
 menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAct)
 self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Simple menu') self.show()

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

02選單欄++

import sys
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QAction
from PyQt5.QtWidgets import qApp
from PyQt5.QtWidgets import QApplication

from PyQt5.QtGui import QIcon

class Demo(QMainWindow):

 def __init__(self): # 重新執行父類的初始化方法(預設的一些操作)
 super().__init__() # 加入自定義方法
 self.initUI()
 def initUI(self): # 設定選單的圖示
 exitAct = QAction(QIcon('exit.png'),'&Exit', self) exitAct.setShortcut('Ctrl+Q') exitAct.setStatusTip('Exit application') exitAct.triggered.connect(qApp.quit)
 self.statusBar()
 menubar = self.menuBar() file_menu = menubar.addMenu('&File') file_menu.addAction(exitAct)
 self.setGeometry(300,300,300,300) self.setWindowTitle('簡單的選單')
 self.show()
app = QApplication(sys.argv)
ex = Demo()
app.exec()

03簡單的視窗(細緻分析)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by xiaoming

# 本模組的功能:<>

# 這個簡單的小例子展示的是一個小視窗。但是我們可以在這個小視窗上面做很多事情,改變大小,最大化,最小化等,這需要很多程式碼才能實現。這在很多應用中很常見,沒必要每次都要重寫這部分程式碼,Qt已經提供了這些功能。PyQt5是一個高階的工具集合,相比使用低階的工具,能省略上百行程式碼。

# 匯入一些需要的模組
import sys
# 這裡面引入了qtwidgets模組,其中包含了基本的使用者介面控制元件
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget

# 建立app物件
app = QApplication(sys.argv)
# 每個pyqt5應用都必須建立一個應用物件
# sys.argv是一組命令列引數的列表
# python可以在shell裡執行,這個引數提供對指令碼控制的功能
w = QWidget()
# qwidget是使用者控制元件中的基本控制元件,提供了基本的應用構造器
# 預設情況下,構造器沒有父級,沒有父級的構造器稱為視窗(window)
w.resize(250,450)
# resize這個方法能夠改變控制元件的大小,這裡的意思的視窗寬250px,高450px
w.move(300,200)
# move()是修改控制元件位置的方法.他把控制元件放置到螢幕座標的(300,200位置)
# 注:螢幕座標的原點是螢幕的左上角
w.setWindowTitle('我的第一個視窗')
# 這裡給這個視窗新增了一個標題,標題在標題欄展示
# 雖然看起來是廢話,但是以後回學習到各種欄,還是要注意一下,多了就懵逼了
w.show()
# show()能讓控制元件在桌面上顯示出來.控制元件在記憶體中建立,之後才能在顯示器上顯示出來
sys.exit(app.exec())
# 最後,我們進入了應用的主迴圈中,事件處理器這個時候開始工作.
# 主迴圈從視窗上接收事件,並把事件傳入到派發到應用控制元件裡.
# 當呼叫exit()方法或者直接銷燬主控制元件時,主迴圈就會結束
# sys.exit()方法能確保主迴圈安全退出.外部環境能通知主控制元件怎麼結束

# exec_()之所以有個下劃線,是因為exec是一個python的關鍵字

04帶視窗圖示


# 首先還是要匯入對應的模組
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QIcon

# 之前的例子是程式式程式設計,python當然支援物件導向程式設計
# 建立一個類
class Test(QWidget):

 def __init__(self): super().__init__() self.initUI()  # 使用initUI方法建立了一個GUI

 '''  物件導向程式設計最重要的三個部分是類(class),資料和方法.
  我們建立了一個類的呼叫,這個類繼承自QWidget.
  這個就意味著,我們呼叫了兩個構造器,一個是這個類本身的,一個是這個類繼承的
 super()構造器方法返回父級的物件.__init()方法是構造器的一個方法.
  俗稱初始化魔術方法
 '''
 def initUI(self): self.setGeometry(300, 200, 700, 400) self.setWindowTitle('標題起啥都行')
 self.setWindowIcon(QIcon('logo.png')) '''  上面三個方法都是繼承自QWidget類.
 setGeometry() 有兩個作用: 把視窗放到螢幕上並且設定視窗大小.
  引數分別代表螢幕座標的x y 和視窗大小的長和寬
 setWindowTitle就是設定標題內容,不用多說
 也就是說這個方法是 resize()和move()的合體.
  最後一個方法就是新增圖示,先建立一個QIcon物件,然後接受一個路徑主輔材作為引數,顯示圖示
 ''' self.show()

yingyong = QApplication(sys.argv)
ex1 = Test()
sys.exit(yingyong.exec_())

# 應用和示例的物件創立,主迴圈開始

05提示框


# 匯入模組
import sys

from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QToolTip
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QApplication

from PyQt5.QtGui import QFont

# 來直接來一個類
class Demo(QWidget):    #繼承自QWidget

 # 初始化魔術方法直接上
 def __init__(self): # 父類的方法還原
 super().__init__() # 執行自己的方法
 self.initUI() def initUI(self): # 這個字型的話,系統中有的都行
 QToolTip.setFont(QFont('微軟雅黑',15))
 # 這個 例子中,我們建立 了一個提示框
 self.setToolTip('不信了還<b>這是一個啥玩意</b>')
 # 這個高,實在是高
 # html中的標籤也能應用樣式
 # 強,實在是強
 btn = QPushButton('點我',self)
 # 這個靜態方法設定了提示框的字型,我們使用了15px的微軟雅黑的字型
 btn.setToolTip('君不見黃河之水<br>天上來')
 # 呼叫setTooltip()建立提示框可以使用富文字格式的內容
 btn.resize(btn.sizeHint()) btn.move(50,70)
 self.setGeometry(200,150,800,450) self.setWindowTitle('標題就是沒有標題')
 # 顯示
 self.show()
app = QApplication(sys.argv)
ex1 = Demo()
sys.exit(app.exec_())

06關閉視窗


# 本模組的功能:<>
'''
TODO 要做的可多了
'''
# 關閉一個視窗最直觀的方式就是點選標題欄的那個×,這個例子裡面
# print(我們展示的是如何用程式關閉一個視窗)
# print(這裡我們將解除)到一點single和slots的知識
# 本例子使用的是QPushButton元件類
# QPushButton(string text,Qwidget parent = None)
# text引數是想要顯示的按鈕名稱,parent引數是放在按鈕上的元件
# 在我們的例子裡面,這個引數是QWidget.應用中的元件都是一層一層(繼承而來的)
# 在這個層裡,大部分的元件都有自己的父級,沒有父級的元件,是頂級的視窗

# 還是tmd要匯入對應的包和模組
import sys

from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QApplication

from PyQt5.QtCore import QCoreApplication
# 程式需要QtCore物件

# 上來先來一個類
class Example(QWidget):

 # 初始化魔術方法
 def __init__(self): super().__init__() self.initUI()
 def initUI(self):
 qbtn = QPushButton('退出就退出',self)
 # 建立一個繼承自 QPushButton 的按鈕.
 # 第一個引數是按鈕的文字,第二個引數是按鈕的父級元件
 # 這個例子中,父級元件就是我們建立的繼承自QWidget 的 Example 類
 qbtn.clicked.connect(QCoreApplication.instance().quit) # 事件傳遞系統在PyQt5內建的single和slot機制裡面.點選按鈕之後,訊號會被捕捉並給出既定的反應
 # QCoreApplication包含了事件的主迴圈,它能新增和刪除所有的事件
 # instance()建立 了一個它的例項.
 # QCoreApplication是在QApplication裡建立的
 # 點選事件和能終止程式並退出應用的quit函式繫結在了一起.
 # 在傳送者和接受者之間建立了通訊,傳送者就是按鈕,接受者就是應用物件
 qbtn.move(50,50)
 self.setGeometry(300,200,250,150) self.setWindowTitle("退出按鈕練習")
 # 顯示
 self.show()
yingyong = QApplication(sys.argv)
ex1 = Example()
sys.exit(yingyong.exec_())
# 這裡建立了一個點選之後就退出視窗的按鈕

07訊息盒子


# 匯入模組
import sys
from PyQt5.QtWidgets import  QWidget
from PyQt5.QtWidgets import  QMessageBox
from PyQt5.QtWidgets import  QApplication

# 建立一個類
class Example(QWidget):

 def __init__(self): super().__init__() # 執行自己的函式
 self.initUI()
 def initUI(self): self.setGeometry(300,200,250,150) self.setWindowTitle('訊息盒子')
 self.show()
 def closeEvent(self, QCloseEvent):
 reply = QMessageBox.question(self, '訊息啊哈!',"你確定你要退出了",QMessageBox.yes | QMessageBox.No, QMessageBox.No)
 if reply == QMessageBox.Yes: QCloseEvent.accept() else: QCloseEvent.ignore()
app = QApplication(sys.argv)
demo = Example()
app.exec_()

UI檔案生成demo01模組(主視窗)

test.py程式碼如下:

import sys
from PyQt5.QtWidgets import *
# 匯入生成的 py模組
from demo01 import *
# 建立app
app = QApplication(sys.argv)
# 例項化主視窗物件
w = QMainWindow()
# 例項化並呼叫初始化方法
Ui_MainWindow().setupUi(w)
# 顯示視窗
w.show()
sys.exit(app.exec_())
pass
本作品採用《CC 協議》,轉載必須註明作者和本文連結
秋葉夏風

相關文章