PyQt5案例汇总(完整版)
生活随笔
收集整理的這篇文章主要介紹了
PyQt5案例汇总(完整版)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
個人博客點這里
PyQt5案例匯總(完整版)
起步
PyQt5是一套綁定Qt5的應(yīng)用程序框架。他在Python 2.x和3.x中都是可用的。該教程使用的是Python3.x。
Qt庫是一套最有用的GUI庫。
PyQt5是作為一套Python模塊實現(xiàn)的。他已經(jīng)超過620個類和6000個函數(shù)與方法。他是一個運(yùn)行在所有主流操作系統(tǒng)上的多平臺組件,包括Unix,Windows和Mac OS。
說明
下面小編就給大家提供一些簡單的pyqt5的案例,如有需要拿走不謝!!!
本文轉(zhuǎn)載from:PyQt5-Chinese-tutorial
菜單欄和工具欄
01窗口居中
# 導(dǎo)入需要的包和模塊 import sys from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QDesktopWidget # QDesktopWidget這個庫提供了用戶的桌面信息,包括屏幕的大小 from PyQt5.QtWidgets import QApplication# 創(chuàng)建一個類 class Ex(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(250,150)self.center()# 這個方法調(diào)用我們下面寫的,實現(xiàn)對話框居中的方法self.setWindowTitle('chuangkou要居中')self.show()def center(self):qr = self.frameGeometry()# 得到了主窗口大小print('qr:',qr)cp = QDesktopWidget().availableGeometry().center()# 獲取顯示器的分辨率,然后得到中間點的位置print('cp:',cp)qr.moveCenter(cp)# 然后把自己的窗口的中心點放到qr的中心點self.move(qr.topLeft())app = QApplication(sys.argv) demo1 = Ex() sys.exit(app.exec_())02 狀態(tài)欄
# 導(dǎo)入需要的包和模塊 import sys # from PyQt5.QtWidgets import QWidget # from PyQt5.QtWidgets import QDesktopWidget # QDesktopWidget這個庫提供了用戶的桌面信息,包括屏幕的大小 from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QMainWindowclass Ex(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):# 狀態(tài)欄是由這個創(chuàng)建的self.statusBar().showMessage('準(zhǔn)備')# 調(diào)用QtGui.QMainWindow 類的 statusBar()方法#3 創(chuàng)建狀態(tài)欄.第一次調(diào)用創(chuàng)建一個狀態(tài)欄,返回一個狀態(tài)欄對象.#3 showMessage()方法在狀態(tài)欄上顯示一條信息self.setGeometry(300,300,250,150)self.setWindowTitle('標(biāo)題還是要取的')#顯示self.show()app = QApplication(sys.argv) demo1 = Ex() sys.exit(app.exec_())03菜單欄
import sys from PyQt5.QtWidgets import QMainWindow from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QAction from PyQt5.QtWidgets import qApp from PyQt5.QtGui import QIconclass Ex(QMainWindow):def __init__(self):super(Ex, self).__init__()self.initUI()def initUI(self):exitAct = QAction(QIcon("exit.png"),'&Exit',self)print(exitAct)exitAct.setShortcut("ctrl+q")exitAct.setStatusTip('tuichu應(yīng)用')exitAct.triggered.connect(qApp.quit)self.statusBar()menubar = self.menuBar()fileMenu = menubar.addMenu('&File')fileMenu.addAction(exitAct)self.setGeometry(300,300,399,200)self.setWindowTitle('決賽你電腦的')self.show()app = QApplication(sys.argv) demo1 = Ex() sys.exit(app.exec_())04子菜單
import sys from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplicationclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):menubar = self.menuBar()fileMenu = menubar.addMenu('File')impMenu = QMenu('Import', self)impAct = QAction('Import mail', self)impMenu.addAction(impAct)newAct = QAction('New', self)fileMenu.addAction(newAct)fileMenu.addMenu(impMenu)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Submenu')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())05 勾選菜單
import sys from PyQt5.QtWidgets import QMainWindow, QAction, QApplicationclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.statusbar = self.statusBar()self.statusbar.showMessage('Ready')menubar = self.menuBar()viewMenu = menubar.addMenu('View')# 本例創(chuàng)建了一個行為菜單。這個行為/動作能切換狀態(tài)欄顯示或者隱藏。viewStatAct = QAction('View statusbar', self, checkable=True)viewStatAct.setStatusTip('View statusbar') # 用checkable選項創(chuàng)建一個能選中的菜單。viewStatAct.setChecked(True) # 默認(rèn)設(shè)置為選中狀態(tài)viewStatAct.triggered.connect(self.toggleMenu)viewMenu.addAction(viewStatAct)# 依據(jù)選中狀態(tài)切換狀態(tài)欄的顯示與否。self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Check menu')self.show()def toggleMenu(self, state):if state:self.statusbar.show()else:self.statusbar.hide()app = QApplication(sys.argv) demo1 = Example() sys.exit(app.exec_())06 右鍵菜單
import sys from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplicationclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Context menu')self.show()def contextMenuEvent(self, event):cmenu = QMenu(self)newAct = cmenu.addAction("New")print(newAct)opnAct = cmenu.addAction("Open")print(opnAct)quitAct = cmenu.addAction("Quit")action = cmenu.exec_(self.mapToGlobal(event.pos()))if action == quitAct:qApp.quit()elif action == opnAct:print('打開就打開')elif action == newAct:print('新建就新建')app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())07工具欄
# 菜單欄包含了所有的命令,工具欄就是常用的命令的集合。import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):exitAct = QAction(QIcon('logo.png'), 'Exit', self)exitAct.setShortcut('Ctrl+Q')exitAct.triggered.connect(qApp.quit)# 和上面的菜單欄差不多,這里使用了一個行為對象,# 這個對象綁定了一個標(biāo)簽,一個圖標(biāo)和一個快捷鍵。# 這些行為被觸發(fā)的時候,會調(diào)用QtGui.QMainWindow的quit方法退出應(yīng)用。self.toolbar = self.addToolBar('Exit')self.toolbar.addAction(exitAct)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Toolbar')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) # 上面的例子中,我們創(chuàng)建了一個工具欄這個工具欄只有一個退出應(yīng)用的動作08主窗口(啥都有的呢)
# 本模塊的功能:<> import sys from PyQt5.QtWidgets import QMainWindow from PyQt5.QtWidgets import QTextEdit from PyQt5.QtWidgets import QAction from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):textEdit = QTextEdit()self.setCentralWidget(textEdit)exitAct = QAction(QIcon('logo.png'), '退退退', self)exitAct.setShortcut('Ctrl+Q')exitAct.setStatusTip('退出應(yīng)用')exitAct.triggered.connect(self.close)self.statusBar()menubar = self.menuBar()fileMenu = menubar.addMenu('文件')fileMenu.addAction(exitAct)toolbar = self.addToolBar('退出')toolbar.addAction(exitAct)self.setGeometry(300, 300, 350, 250)self.setWindowTitle('代碼編輯工具')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())布局管理
09絕對定位的應(yīng)用
import sys from PyQt5.QtWidgets import QWidget, QLabel, QApplicationclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):lbl1 = QLabel('Zetcode', self)lbl1.move(15, 10)lbl2 = QLabel('tutorials', self)lbl2.move(35, 40)lbl3 = QLabel('for programmers', self)lbl3.move(55, 70)self.setGeometry(300, 300, 250, 150)self.setWindowTitle('Absolute')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())# 絕對定位其實說白了就是使用相對于原點的像素來進(jìn)行計算10 盒子布局
import sys from PyQt5.QtWidgets import (QWidget, QPushButton,QHBoxLayout, QVBoxLayout, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):okButton = QPushButton("OK")cancelButton = QPushButton("Cancel")hbox = QHBoxLayout()hbox.addStretch(1)hbox.addWidget(okButton)hbox.addWidget(cancelButton)vbox = QVBoxLayout()vbox.addStretch(1)vbox.addLayout(hbox)self.setLayout(vbox)self.setGeometry(300, 300, 300, 150)self.setWindowTitle('Buttons')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())11 柵格布局(表格)
import sys from PyQt5.QtWidgets import (QWidget, QGridLayout,QPushButton, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):grid = QGridLayout()self.setLayout(grid)names = ['Cls', 'Bck', '', 'Close','7', '8', '9', '/','4', '5', '6', '*','1', '2', '3', '-','0', '.', '=', '+']positions = [(i,j) for i in range(5) for j in range(4)]for position, name in zip(positions, names):if name == '':continuebutton = QPushButton(name)grid.addWidget(button, *position)self.move(300, 150)self.setWindowTitle('Calculator')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())12 制作提交反饋信息的布局
import sys from PyQt5.QtWidgets import \(QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):title = QLabel('Title')author = QLabel('Author')review = QLabel('Review')titleEdit = QLineEdit()authorEdit = QLineEdit()reviewEdit = QTextEdit()grid = QGridLayout()grid.setSpacing(10)grid.addWidget(title, 1, 0)grid.addWidget(titleEdit, 1, 1)grid.addWidget(author, 2, 0)grid.addWidget(authorEdit, 2, 1)grid.addWidget(review, 3, 0)grid.addWidget(reviewEdit, 3, 1, 5, 1)self.setLayout(grid)self.setGeometry(300, 300, 350, 300)self.setWindowTitle('Review')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())事件和信號
13 信號和槽機(jī)制
''' 事件 signals and slots 被其他人翻譯成信號和槽機(jī)制,(⊙o⊙)…我這里還是不翻譯好了。 所有的應(yīng)用都是事件驅(qū)動的。事件大部分都是由用戶的行為產(chǎn)生的,當(dāng)然也有其他的事件產(chǎn)生方式, 比如網(wǎng)絡(luò)的連接,窗口管理器或者定時器等。調(diào)用應(yīng)用的exec_()方法時,應(yīng)用會進(jìn)入主循環(huán),主循環(huán)會監(jiān)聽和分發(fā)事件。 在事件模型中,有三個角色: 事件源 事件 事件目標(biāo) 事件源就是發(fā)生了狀態(tài)改變的對象。事件是這個對象狀態(tài)改變的內(nèi)容。 事件目標(biāo)是事件想作用的目標(biāo)。事件源綁定事件處理函數(shù),然后作用于事件目標(biāo)身上。 PyQt5處理事件方面有個signal and slot機(jī)制。Signals and slots用于對象間的通訊。 事件觸發(fā)的時候,發(fā)生一個signal,slot是用來被Python調(diào)用的 (相當(dāng)于一個句柄?這個詞也好惡心,就是相當(dāng)于事件的綁定函數(shù))slot只有在事件觸發(fā)的時候才能調(diào)用。 '''import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import \(QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):lcd = QLCDNumber(self)print("lcd:",lcd)sld = QSlider(Qt.Horizontal, self)print("sld",sld)vbox = QVBoxLayout()print(vbox)vbox.addWidget(lcd)vbox.addWidget(sld)self.setLayout(vbox)print(lcd.display)sld.valueChanged.connect(lcd.display)self.setGeometry(300, 300, 250, 150)self.setWindowTitle('信號和槽機(jī)制的')self.show()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())14 重構(gòu)事件處理器
import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplicationclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 250, 150)self.setWindowTitle('事件的手')self.show()def keyPressEvent(self, e):if e.key() == Qt.Key_Escape:self.close()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())15 事件對像
import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QLabelclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):grid = QGridLayout()grid.setSpacing(10)x = 0y = 0self.text = "x: {0}, y: {1}".format(x, y)self.label = QLabel(self.text, self)grid.addWidget(self.label, 0, 0, Qt.AlignTop)self.setMouseTracking(True)self.setLayout(grid)self.setGeometry(300, 300, 350, 200)self.setWindowTitle('Event object')self.show()def mouseMoveEvent(self, e):x = e.x()y = e.y()text = "x: {0}, y: {1}".format(x, y)self.label.setText(text)app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())16事件發(fā)送
import sys from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplicationclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):btn1 = QPushButton("按鈕老大", self)btn1.move(30, 50)btn2 = QPushButton("按鈕老二", self)btn2.move(150, 50)btn1.clicked.connect(self.buttonClicked)btn2.clicked.connect(self.buttonClicked)self.statusBar()self.setGeometry(300, 300, 290, 150)self.setWindowTitle('事件發(fā)送')self.show()def buttonClicked(self):sender = self.sender()self.statusBar().showMessage(sender.text() + '被按那兒了')app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())17 信號發(fā)送
import sys from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QMainWindow, QApplicationclass Communicate(QObject):closeApp = pyqtSignal()class Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.c = Communicate()self.c.closeApp.connect(self.close)self.setGeometry(300, 300, 290, 150)self.setWindowTitle('Emit signal')self.show()def mousePressEvent(self, event):self.c.closeApp.emit()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())對話框
18 對話框(能夠輸入文字呦呦)
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit,QInputDialog, QApplication) import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.btn = QPushButton('Dialog', self)self.btn.move(20, 20)self.btn.clicked.connect(self.showDialog)self.le = QLineEdit(self)self.le.move(130, 22)self.setGeometry(300, 300, 290, 150)self.setWindowTitle('Input dialog')self.show()def showDialog(self):text, ok = QInputDialog.getText(self, 'Input Dialog','Enter your name:')if ok:self.le.setText(str(text))print(text+"哈哈")app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())19 選取顏色(NB壞了)
# 本模塊的功能:<QColorDialog提供顏色的選擇> # TODO 這個厲害,直接調(diào)用系統(tǒng)的顏色選擇框 # TODO 強(qiáng),實在是強(qiáng) from PyQt5.QtWidgets import (QWidget, QPushButton, QFrame,QColorDialog, QApplication) from PyQt5.QtGui import QColor import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):col = QColor(0, 0, 0)self.btn = QPushButton('Dialog', self)self.btn.move(20, 20)self.btn.clicked.connect(self.showDialog)self.frm = QFrame(self)self.frm.setStyleSheet("QWidget { background-color: %s }"% col.name())self.frm.setGeometry(130, 22, 100, 100)self.setGeometry(300, 300, 250, 180)self.setWindowTitle('Color dialog')self.show()def showDialog(self):col = QColorDialog.getColor()if col.isValid():self.frm.setStyleSheet("QWidget { background-color: %s }"% col.name())app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())加油,都看到一半了你!!!
'''┌─┐ ┌─┐ + +┌──┘ ┴───────┘ ┴──┐++│ ││ ─── │++ + + +███████───███████ │+│ │+│ ─┴─ ││ │└───┐ ┌───┘│ ││ │ + +│ ││ └──────────────┐│ ││ ├─┐│ ┌─┘│ │└─┐ ┐ ┌───────┬──┐ ┌──┘ + + + +│ ─┤ ─┤ │ ─┤ ─┤└──┴──┘ └──┴──┘ + + + +神獸保佑代碼無BUG!'''20 選擇字體
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton,QSizePolicy, QLabel, QFontDialog, QApplication) import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):vbox = QVBoxLayout()btn = QPushButton('來來來', self)btn.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)btn.move(20, 20)vbox.addWidget(btn)btn.clicked.connect(self.showDialog)self.lbl = QLabel('Knowledge only matters', self)self.lbl.move(130, 20)vbox.addWidget(self.lbl)self.setLayout(vbox)self.setGeometry(300, 300, 250, 180)self.setWindowTitle('字體目錄')self.show()def showDialog(self):font, ok = QFontDialog.getFont()if ok:self.lbl.setFont(font)print('選擇的字體是',end="")print(font)print(type(font))app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())21 選擇文件
from PyQt5.QtWidgets import \(QMainWindow, QTextEdit, QAction, QFileDialog, QApplication) from PyQt5.QtGui import QIcon import sysclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.textEdit = QTextEdit()self.setCentralWidget(self.textEdit)self.statusBar()openFile = QAction(QIcon('images/open.png'), 'Open', self)openFile.setShortcut('Ctrl+O')openFile.setStatusTip('打開一個新的文件')openFile.triggered.connect(self.showDialog)menubar = self.menuBar()fileMenu = menubar.addMenu('&文件')fileMenu.addAction(openFile)self.setGeometry(300, 300, 350, 300)self.setWindowTitle('File dialog')self.show()def showDialog(self):fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')if fname[0]:f = open(fname[0], 'r')with f:data = f.read()self.textEdit.setText(data)print(data) app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())控件
22 QCheckBox是啥玩意
from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):cb = QCheckBox('改改改', self)cb.move(20, 20)cb.toggle()cb.stateChanged.connect(self.changeTitle)self.setGeometry(300, 300, 250, 150)self.setWindowTitle('真正的標(biāo)題')self.show()def changeTitle(self, state):if state == Qt.Checked:self.setWindowTitle('假裝有標(biāo)題')else:self.setWindowTitle('沒了')app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())23 切換按鈕
from PyQt5.QtWidgets import (QWidget, QPushButton,QFrame, QApplication) from PyQt5.QtGui import QColor import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.col = QColor(0, 0, 0)redb = QPushButton('Red', self)redb.setCheckable(True)redb.move(10, 10)redb.clicked[bool].connect(self.setColor)greenb = QPushButton('Green', self)greenb.setCheckable(True)greenb.move(10, 60)greenb.clicked[bool].connect(self.setColor)blueb = QPushButton('Blue', self)blueb.setCheckable(True)blueb.move(10, 110)blueb.clicked[bool].connect(self.setColor)self.square = QFrame(self)self.square.setGeometry(150, 20, 100, 100)self.square.setStyleSheet("QWidget { background-color: %s }" %self.col.name())self.setGeometry(300, 300, 280, 170)self.setWindowTitle('Toggle button')self.show()def setColor(self, pressed):source = self.sender()if pressed:val = 255else:val = 0if source.text() == "Red":self.col.setRed(val)elif source.text() == "Green":self.col.setGreen(val)else:self.col.setBlue(val)self.square.setStyleSheet("QFrame { background-color: %s }" %self.col.name())if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())24 滑塊是個好東西
from PyQt5.QtWidgets import (QWidget, QSlider,QLabel, QApplication) from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):sld = QSlider(Qt.Horizontal, self)sld.setFocusPolicy(Qt.NoFocus)sld.setGeometry(30, 40, 100, 30)sld.valueChanged[int].connect(self.changeValue)self.label = QLabel(self)self.label.setPixmap(QPixmap('images/logo.png'))self.label.setGeometry(160, 40, 80, 30)self.setGeometry(300, 300, 280, 170)self.setWindowTitle('s什么雞兒玩意r')self.show()def changeValue(self, value):if value == 0:self.label.setPixmap(QPixmap('images/1.png'))elif value > 0 and value <= 30:self.label.setPixmap(QPixmap('images/2.png'))elif value > 30 and value < 80:self.label.setPixmap(QPixmap('images/3.png'))else:self.label.setPixmap(QPixmap('images/4.png'))app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())25 進(jìn)度條
from PyQt5.QtWidgets import (QWidget, QProgressBar,QPushButton, QApplication) from PyQt5.QtCore import QBasicTimer import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.pbar = QProgressBar(self)self.pbar.setGeometry(30, 40, 200, 25)self.btn = QPushButton('走你', self)self.btn.move(40, 80)self.btn.clicked.connect(self.doAction)self.timer = QBasicTimer()self.step = 0self.setGeometry(300, 300, 280, 170)self.setWindowTitle('進(jìn)度條就比較強(qiáng)了')self.show()def timerEvent(self, e):if self.step >= 200:self.timer.stop()self.btn.setText('完成吧')returnself.step = self.step + 1self.pbar.setValue(self.step)def doAction(self):if self.timer.isActive():self.timer.stop()self.btn.setText('走走走')else:self.timer.start(200, self)self.btn.setText('停,唄走了')if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())26 日歷
from PyQt5.QtWidgets import (QWidget, QCalendarWidget,QLabel, QApplication, QVBoxLayout) from PyQt5.QtCore import QDate import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):vbox = QVBoxLayout(self)cal = QCalendarWidget(self)cal.setGridVisible(True)cal.clicked[QDate].connect(self.showDate)vbox.addWidget(cal)self.lbl = QLabel(self)date = cal.selectedDate()self.lbl.setText(date.toString())vbox.addWidget(self.lbl)self.setLayout(vbox)self.setGeometry(300, 300, 350, 300)self.setWindowTitle('看日歷,認(rèn)準(zhǔn)我')self.show()def showDate(self, date):self.lbl.setText(date.toString())if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())27 圖片
from PyQt5.QtWidgets import (QWidget, QHBoxLayout,QLabel, QApplication) from PyQt5.QtGui import QPixmap import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):hbox = QHBoxLayout(self)pixmap = QPixmap("images/09f04")lbl = QLabel(self)lbl.setPixmap(pixmap)hbox.addWidget(lbl)self.setLayout(hbox)self.move(300, 200)self.setWindowTitle('Red Rock')self.show()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())28行編輯
import sys from PyQt5.QtWidgets import \(QWidget, QLabel, QLineEdit, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.lbl = QLabel(self)qle = QLineEdit(self)qle.move(60, 100)self.lbl.move(60, 40)qle.textChanged[str].connect(self.onChanged)self.setGeometry(300, 300, 280, 170)self.setWindowTitle('QLineEdit')self.show()def onChanged(self, text):self.lbl.setText(text)self.lbl.adjustSize()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())29 QSplitter是啥玩意呢?
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,QSplitter, QStyleFactory, QApplication) from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):hbox = QHBoxLayout(self)topleft = QFrame(self)topleft.setFrameShape(QFrame.StyledPanel)topright = QFrame(self)topright.setFrameShape(QFrame.StyledPanel)bottom = QFrame(self)bottom.setFrameShape(QFrame.StyledPanel)splitter1 = QSplitter(Qt.Horizontal)splitter1.addWidget(topleft)splitter1.addWidget(topright)splitter2 = QSplitter(Qt.Vertical)splitter2.addWidget(splitter1)splitter2.addWidget(bottom)hbox.addWidget(splitter2)self.setLayout(hbox)self.setGeometry(300, 300, 400, 300)self.setWindowTitle('QSplitter')self.show()def onChanged(self, text):self.lbl.setText(text)self.lbl.adjustSize()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())30 下拉選框
from PyQt5.QtWidgets import (QWidget, QLabel,QComboBox, QApplication) import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.lbl = QLabel("Ubuntu", self)combo = QComboBox(self)combo.addItem("Ubuntu")combo.addItem("Windows")combo.addItem("centos")combo.addItem("deepin")combo.addItem("redhat")combo.addItem("debain")combo.move(50, 50)self.lbl.move(50, 150)combo.activated[str].connect(self.onActivated)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('下拉選框練習(xí) ')self.show()def onActivated(self, text):self.lbl.setText(text)self.lbl.adjustSize()app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())拖拽
31 簡單的拖放
from PyQt5.QtWidgets import (QPushButton, QWidget,QLineEdit, QApplication) import sysclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)self.setAcceptDrops(True)def dragEnterEvent(self, e):if e.mimeData().hasFormat('text/plain'):e.accept()else:e.ignore()def dropEvent(self, e):self.setText(e.mimeData().text())class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):edit = QLineEdit('', self)edit.setDragEnabled(True)edit.move(30, 65)button = Button("Button", self)button.move(190, 65)self.setWindowTitle('Simple drag and drop')self.setGeometry(300, 300, 300, 150)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()ex.show()app.exec_()32 拖放按鈕組件
from PyQt5.QtWidgets import QPushButton, QWidget, QApplication from PyQt5.QtCore import Qt, QMimeData from PyQt5.QtGui import QDrag import sysclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)def mouseMoveEvent(self, e):if e.buttons() != Qt.RightButton:returnmimeData = QMimeData()drag = QDrag(self)drag.setMimeData(mimeData)drag.setHotSpot(e.pos() - self.rect().topLeft())dropAction = drag.exec_(Qt.MoveAction)def mousePressEvent(self, e):super().mousePressEvent(e)if e.button() == Qt.LeftButton:print('按我嘎哈')class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setAcceptDrops(True)self.button = Button('來吧!!!', self)self.button.move(100, 65)self.setWindowTitle('點擊還能挪')self.setGeometry(300, 300, 280, 150)def dragEnterEvent(self, e):e.accept()def dropEvent(self, e):position = e.pos()self.button.move(position)e.setDropAction(Qt.MoveAction)e.accept()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()ex.show()app.exec_() """ 拖拽 在GUI里,拖放是指用戶點擊一個虛擬的對象,拖動,然后放置到另外一個對象上面的動作。 一般情況下,需要調(diào)用很多動作和方法,創(chuàng)建很多變量。 拖放能讓用戶很直觀的操作很復(fù)雜的邏輯。 一般情況下,我們可以拖放兩種東西:數(shù)據(jù)和圖形界面。 把一個圖像從一個應(yīng)用拖放到另外一個應(yīng)用上的實質(zhì)是操作二進(jìn)制數(shù)據(jù)。 把一個表格從Firefox上拖放到另外一個位置 的實質(zhì)是操作一個圖形組。 """繪圖
33 文本的涂鴉(這個好玩哈)
import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QFont from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.text = "涂鴉要涂的有靈魂"self.setGeometry(300, 300, 280, 170)self.setWindowTitle('繪畫板')self.show()def paintEvent(self, event):qp = QPainter()qp.begin(self)self.drawText(event, qp,168, 34, 243)qp.end()# qp1 = QPainter()# qp1.begin(self)# self.drawText(event, qp1,168, 34, 23)# qp1.end()def drawText(self, event, qp, r,g,b):qp.setPen(QColor(r,g,b))qp.setFont(QFont('微軟雅黑', 15))qp.drawText(event.rect(), Qt.AlignCenter, self.text)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())34 點的繪畫
from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter from PyQt5.QtCore import Qt import sys, randomclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 300, 190)self.setWindowTitle('一大堆點點兒')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawPoints(qp)qp.end()def drawPoints(self, qp):qp.setPen(Qt.red)size = self.size()for i in range(1000):x = random.randint(1, size.width()-1)y = random.randint(1, size.height()-1)qp.drawPoint(x, y)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())35 顏色
from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QBrush import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 350, 100)self.setWindowTitle('Colours')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawRectangles(qp)qp.end()def drawRectangles(self, qp):col = QColor(0, 0, 0)col.setNamedColor('#d4d4d4')qp.setPen(col)qp.setBrush(QColor(200, 0, 0))qp.drawRect(10, 15, 90, 60)qp.setBrush(QColor(255, 80, 0, 160))qp.drawRect(130, 15, 90, 60)qp.setBrush(QColor(25, 0, 90, 200))qp.drawRect(250, 15, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())36 QPen是筆么
from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QPen from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 280, 270)self.setWindowTitle('Pen styles')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawLines(qp)qp.end()def drawLines(self, qp):pen = QPen(Qt.black, 2, Qt.SolidLine)qp.setPen(pen)qp.drawLine(20, 40, 250, 40)pen.setStyle(Qt.DashLine)qp.setPen(pen)qp.drawLine(20, 80, 250, 80)pen.setStyle(Qt.DashDotLine)qp.setPen(pen)qp.drawLine(20, 120, 250, 120)pen.setStyle(Qt.DotLine)qp.setPen(pen)qp.drawLine(20, 160, 250, 160)pen.setStyle(Qt.DashDotDotLine)qp.setPen(pen)qp.drawLine(20, 200, 250, 200)pen.setStyle(Qt.CustomDashLine)pen.setDashPattern([1, 4, 5, 4])qp.setPen(pen)qp.drawLine(20, 240, 250, 240)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())37 QBrush是啥?
from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QBrush from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 355, 280)self.setWindowTitle('Brushes')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawBrushes(qp)qp.end()def drawBrushes(self, qp):brush = QBrush(Qt.SolidPattern)qp.setBrush(brush)qp.drawRect(10, 15, 90, 60)brush.setStyle(Qt.Dense1Pattern)qp.setBrush(brush)qp.drawRect(130, 15, 90, 60)brush.setStyle(Qt.Dense2Pattern)qp.setBrush(brush)qp.drawRect(250, 15, 90, 60)brush.setStyle(Qt.DiagCrossPattern)qp.setBrush(brush)qp.drawRect(10, 105, 90, 60)brush.setStyle(Qt.Dense5Pattern)qp.setBrush(brush)qp.drawRect(130, 105, 90, 60)brush.setStyle(Qt.Dense6Pattern)qp.setBrush(brush)qp.drawRect(250, 105, 90, 60)brush.setStyle(Qt.HorPattern)qp.setBrush(brush)qp.drawRect(10, 195, 90, 60)brush.setStyle(Qt.VerPattern)qp.setBrush(brush)qp.drawRect(130, 195, 90, 60)brush.setStyle(Qt.BDiagPattern)qp.setBrush(brush)qp.drawRect(250, 195, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())38 貝賽爾曲線(這個學(xué)過PS的都知道)
from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QPainterPath from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 用QPainterPath路徑創(chuàng)建貝塞爾曲線。# 使用cubicTo()方法生成,分別需要三個點:起始點,控制點和終止點。self.setGeometry(300, 300, 380, 250)self.setWindowTitle('繪制貝塞爾曲線')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)qp.setRenderHint(QPainter.Antialiasing)self.drawBezierCurve(qp)qp.end()def drawBezierCurve(self, qp):path = QPainterPath()path.moveTo(30, 30)path.cubicTo(30, 30, 350, 30, 200, 150)qp.drawPath(path)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())自定義組件
39
from PyQt5.QtWidgets import (QWidget, QSlider, QApplication,QHBoxLayout, QVBoxLayout) from PyQt5.QtCore import QObject, Qt, pyqtSignal from PyQt5.QtGui import QPainter, QFont, QColor, QPen import sysclass Communicate(QObject):updateBW = pyqtSignal(int)class BurningWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setMinimumSize(1, 30)self.value = 75self.num = [75, 150, 225, 300, 375, 450, 525, 600, 675]def setValue(self, value):self.value = valuedef paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawWidget(qp)qp.end()def drawWidget(self, qp):MAX_CAPACITY = 700OVER_CAPACITY = 750font = QFont('Serif', 7, QFont.Light)qp.setFont(font)size = self.size()w = size.width()h = size.height()step = int(round(w / 10))till = int(((w / OVER_CAPACITY) * self.value))full = int(((w / OVER_CAPACITY) * MAX_CAPACITY))if self.value >= MAX_CAPACITY:qp.setPen(QColor(255, 255, 255))qp.setBrush(QColor(255, 255, 184))qp.drawRect(0, 0, full, h)qp.setPen(QColor(255, 175, 175))qp.setBrush(QColor(255, 175, 175))qp.drawRect(full, 0, till-full, h)else:qp.setPen(QColor(255, 255, 255))qp.setBrush(QColor(255, 255, 184))qp.drawRect(0, 0, till, h)pen = QPen(QColor(20, 20, 20), 1,Qt.SolidLine)qp.setPen(pen)qp.setBrush(Qt.NoBrush)qp.drawRect(0, 0, w-1, h-1)j = 0for i in range(step, 10*step, step):qp.drawLine(i, 0, i, 5)metrics = qp.fontMetrics()fw = metrics.width(str(self.num[j]))qp.drawText(i-fw/2, h/2, str(self.num[j]))j = j + 1class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):OVER_CAPACITY = 750sld = QSlider(Qt.Horizontal, self)sld.setFocusPolicy(Qt.NoFocus)sld.setRange(1, OVER_CAPACITY)sld.setValue(75)sld.setGeometry(30, 40, 150, 30)self.c = Communicate()self.wid = BurningWidget()self.c.updateBW[int].connect(self.wid.setValue)sld.valueChanged[int].connect(self.changeValue)hbox = QHBoxLayout()hbox.addWidget(self.wid)vbox = QVBoxLayout()vbox.addStretch(1)vbox.addLayout(hbox)self.setLayout(vbox)self.setGeometry(300, 300, 390, 210)self.setWindowTitle('Burning widget')self.show()def changeValue(self, value):self.c.updateBW.emit(value)self.wid.repaint()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())終于翻到底部了,能看到這里,給你自己一個獎勵吧!!!
'''┌─┐ ┌─┐ + +┌──┘ ┴───────┘ ┴──┐++│ ││ ─── │++ + + +███████───███████ │+│ │+│ ─┴─ ││ │└───┐ ┌───┘│ ││ │ + +│ ││ └──────────────┐│ ││ ├─┐│ ┌─┘│ │└─┐ ┐ ┌───────┬──┐ ┌──┘ + + + +│ ─┤ ─┤ │ ─┤ ─┤└──┴──┘ └──┴──┘ + + + +神獸保佑代碼無BUG!'''總結(jié)
以上是生活随笔為你收集整理的PyQt5案例汇总(完整版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌硬盘 idm_为什么Google搜索
- 下一篇: 安卓逆向 | 某新闻类APP urlSi