文章目录
PyQt5程序基本格式
QMainWindow主窗口
QLabel标签
QTextBrowser文本浏览器
QTextEdit文本编辑器
QPushButton按键
QCheckBox复选框
QRadioButton单选按钮
QMessageBox弹框
QSlider滑动条
QDialog提示窗口
QFileDialog打开文件或文件夹
QTreeView目录树结构
QTimer计时器
QSystemTrayIcon托盘
常用操作
获取屏幕分辨率
获取屏幕截图
设置窗口随内容大小自动变化
获取鼠标事件
QPixmap对象转字节流
PyQt5程序基本格式
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel
from ui import Ui_MainWindow # 由qtdesigner 生成的布局

class MyApp(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.setupUi(self)

if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
QMainWindow主窗口
设置主窗口属性,居中显示

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMainWindow, QDesktopWidget, QApplication

class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.resize(512, 512) # 设置窗口的大小
self.status = self.statusBar() # 实例化创建状态栏
self.status.showMessage('状态栏提示', 4000) # # 将提示信息显示在状态栏中showMessage(‘提示信息’,显示时间(单位毫秒))
self.setWindowTitle('主窗口标题') # 设置窗口标题
self.setWindowIcon(QIcon('logo.png')) # 设置图标
self.move_center()

def move_center(self):
screen = QDesktopWidget().screenGeometry()
form = self.geometry()
x_move_step = (screen.width() - form.width()) / 2
y_move_step = (screen.height() - form.height()) / 2
self.move(x_move_step, y_move_step)

if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
QLabel标签
显示读取文字
label = QLabel(self)
label.setText("显示内容") # 写入
text = label.text() # 读取

显示图片
label = QLabel(self)
pixmap = QPixmap("文件路径")
label.setPixmap(pixmap)
label.setScaledContents(True) # 设置图片随QLabel大小缩放
label.setAlignment(Qt.AlignCenter) # 设置图像居中显示

结合opencv显示图片(方便处理图像)
label = QLabel(self)
label.setPixmap(QPixmap("")) # 移除QLabel上的图片
img = cv2.imread("文件路径") # 读取图片,路径不能有中文
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # bgr -> rgb
h, w, c = img.shape # 获取图片形状
image = QImage(img, w, h, 3 * w, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(image)
label.setPixmap(pixmap)
label.setScaledContents(True) # 设置图片随QLabel大小缩放

QTextBrowser文本浏览器
设置, 追加, 获取文本

text_browser = QTextBrowser(self)
text_browser.setText(a) # 设置文本
text_browser.append(a) # 追加文本
text = text_browser.toPlainText() # 获取文本

QTextEdit文本编辑器
设置, 追加, 获取文本

text_edit = QTextEdit(self)
text_edit.setText(a) # 设置文本
text_edit.append(a) # 追加文本
text = text_edit.toPlainText() # 获取文本

QPushButton按键
按下触发事件

button = QPushButton(self)
button .setChecked() # 设置为可选中
button.clicked.connect(clicked_function) # 按下触发

def clicked_function():
pass

QCheckBox复选框
check_box = QCheckBox(self)
check_box.setChecked() # 默认设置为选中
check_box.setCheckable(True) # 设置为可被选中
check_box.stateChanged.connect(check_box_changed) # 状态改变触发check_box_changed函数

def use_external_camera(self, status):
if status == Qt.Checked: # 若状态为选中
pass
else:
pass

QRadioButton单选按钮
radio_button1 = QRadioButton()
radio_button2 = QRadioButton()

radio_button1.setChecked(True) # 设置选中,同时只能有一个选中
radio_button1.toggled.connect(radio_button_changed) # 按下触发radio_button_changed函数
radio_button2.setChecked(False) # 设置非选中
radio_button2.toggled.connect(radio_button_changed) # 按下触发radio_button_changed函数(共用同一个函数)

def radio_button_changed():
if radio_button1.isChecked(): #返回是否选中
pass
elif radio_button2.isChecked():
pass

QMessageBox弹框
QMessageBox对话框包含类型只是图标不同其他无太大差别:

QMessageBox.information 信息框
QMessageBox.question 问答框
QMessageBox.warning 警告
QMessageBox.ctitical 危险
QMessageBox.about 关于
reply = QMessageBox.information(self, "标题", "消息", QMessageBox.Yes | QMessageBox.No)
if reply==QMessageBox.Yes:
...
else:
...

QSlider滑动条
滑动条设置上下限, 设置当前值, 滑动触发事件

slider = QSlider()
slider.setOrientation(Qtcore.Qt.Horizontal) # 设置为水平滑动条
# slider.setOrientation(Qtcore.Qt.Vertical) # 设置为竖直滑动条
slider.setMaximum(100) # 设置最大值
slider.setMinimum(0) # 设置最小值
slider.setValue(72) # 设置当前值
value = slider.value() #获取当前值
slider.valueChanged.connect(change_function) # 改变值时触发change_function函数

QDialog提示窗口
dialog = QDialog()
dialog.adjustSize() # 随内容自动改变大小
text = QLineEdit(message, dialog) # 添加空间显示提示文字
text.adjustSize()
# 设置窗口的属性为ApplicationModal模态,用户只有关闭弹窗后,才能关闭主界面
dialog.setWindowModality(Qt.ApplicationModal)
dialog.exec_() # 阻塞执行,只调用show执行后立马销毁

QFileDialog打开文件或文件夹
QFileDialog.getOpenFileName 获取文件名
QFileDialog.getExistingDirectory 获取文件夹名
file_name, _ = QFileDialog.getOpenFileName(self, '标题', './', 'Image files(*.jpg *.gif *.png)') # 可设置默认路径与可选文件类型
folder_name = QFileDialog.getExistingDirectory(self, '标题', './') # 可设置默认路径

QTreeView目录树结构
创建目录树结果并显示当前路径的树结构,双击文件触发函数

tree_model = QDirModel()
# 或者
# tree_model = QFileSystemModel()
# tree_model.setRootPath(os.getcwd()) # 设置根目录为当前目录
tree_view = QTreeView()
tree_view.setModel(tree_model )
tree_view.setRootIndex(self.dirModel.index(os.getcwd())) # 设置当前目录(没有这句话则为默认C盘路径)
tree_view.setWindowTitle(self.treeView.tr("当前目录")) # 显示title...好像没啥用
treeView.doubleClicked.connect(tree_cilcked_function) # 双击文件触发tree_cilcked_function函数
tree_view.show()

# 函数调用方式
def tree_cilcked_function(self, file_index):
file_name = tree_model.filePath(file_index)
...

QTimer计时器
设置计时时间,时间到触发时间,循环执行

timer = QTimer()
timer.timeout.connect(process_function)
timer.start(20) # 设置计时时间为20ms,并启动计时器
timer.stop() # 停止计时器
def process_function():
···

QSystemTrayIcon托盘
tray = QSystemTrayIcon(QIcon('./icon/cut.png'), self) # 创建系统托盘对象,传入主窗口
tray.activated.connect(func) # 设置托盘点击事件处理函数
tray_menu = QMenu(QApplication.desktop()) # 创建菜单
action1 = QAction(u'还原 ', self, triggered=func2) # 添加一级菜单动作选项(还原主窗口)
action2 = QAction(u'退出 ', self, triggered=fun3) # 添加一级菜单动作选项(退出程序)
tray_menu.addAction(action1) # 为菜单添加动作
tray_menu.addAction(action2)
tray.setContextMenu(tray_menu) # 设置系统托盘菜单
tray.show()

常用操作
获取屏幕分辨率
desktop = QApplication.desktop()
# 获取显示器分辨率大小
screenRect = desktop.screenGeometry()
height = self.screenRect.height()
width = self.screenRect.width()

获取屏幕截图
screen = QApplication.primaryScreen()
pixmap = screen.grabWindow(0)

设置窗口随内容大小自动变化
QWidget().adjustSize()

获取鼠标事件
def mousePressEvent(self, QMouseEvent):
pass

def mouseReleaseEvent(self, QMouseEvent):
pass

def mouseMoveEvent(self, QMouseEvent):
pass

QMouseEvent的常用属性

QMouseEvent.x() # 鼠标坐标x
QMouseEvent.y() # 鼠标坐标y
QMouseEvent.button() # 按钮,枚举类型 Qt.LeftButton / Qt.RightButton

QPixmap对象转字节流
shot_bytes = QByteArray()
buffer = QBuffer(shot_bytes)
buffer.open(QIODevice.WriteOnly)
shot_img = self.get_shot_img()
shot_img.save(buffer, 'png') # 保存到buffer对象
data = shot_bytes.data()

QTableView

import sys

from PyQt5 import QtCore,QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
     
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        loadUi('qtdesigner.ui', self)
        self.pushButton.clicked.connect(self.say)
        self.showData()
         
    def say(self):     
        self.label.setText("哈哈哈")
        print("哈哈哈")   
         
    def showData(self):
        # 准备数据模型
        self.sm=QtGui.QStandardItemModel()
         
        #设置数据头栏名称
        self.sm.setHorizontalHeaderItem(0, QtGui.QStandardItem("Name"))
        self.sm.setHorizontalHeaderItem(1, QtGui.QStandardItem("NO."))
         
        #设置数据条目
        self.sm.setItem(0, 0, QtGui.QStandardItem("张三"))
        self.sm.setItem(0, 1, QtGui.QStandardItem("20120202"))
         
        self.sm.setItem(1, 0, QtGui.QStandardItem("李四"))
        self.sm.setItem(1, 1, QtGui.QStandardItem("20120203000000000000000"))
         
        self.sm.setItem(2, 0, QtGui.QStandardItem("李四"))
        self.sm.setItem(2, 1, QtGui.QStandardItem("20120203000000000000000"))
         
        self.sm.setItem(3, 0, QtGui.QStandardItem("李四"))
        self.sm.setItem(3, 1, QtGui.QStandardItem("20120203000000000000000"))
         
        self.sm.setItem(4, 0, QtGui.QStandardItem("李四"))
        self.sm.setItem(4, 1, QtGui.QStandardItem("20120203000000000000000"))
         
        self.sm.setItem(5, 0, QtGui.QStandardItem("李四"))
        self.sm.setItem(5, 1, QtGui.QStandardItem("20120203000000000000000"))
         
        #设置条目颜色和字体
        self.sm.item(0, 0).setForeground(QtGui.QBrush(QtGui.QColor(255, 0, 0)))    
        self.sm.item(0, 0).setFont(QtGui.QFont("Times", 10, QtGui.QFont.Black))
         
        self.sm.item(3, 1).setBackground(QtGui.QBrush(QtGui.QColor(255, 255, 0)))
         
        #按照编号排序
        self.sm.sort(1, QtCore.Qt.DescendingOrder)
         
        #将数据模型绑定到QTableView
        self.tableView.setModel(self.sm)
         
        #QTableView
        self.tableView.setColumnWidth(0,100)
        self.tableView.setColumnWidth(1,200)
     
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())
 
获取数据:
  1. for i in range(self.sm.rowCount()):
  2. if self.sm.item(i,0) != None and len(self.sm.item(i,0).text()) > 0:
  3. dataItem = {}
  4. dataItem[0] = self.sm.item(i,0).text()
  5. sheet.cell(i+1, 1).value = self.tbView.item(i,0).text()
  6. if self.sm.item(i,1) != None and len(self.sm.item(i,1).text()) > 0:
  7. dataItem[1] = self.sm.item(i,1).text()
  8. sheet.cell(i+1, 2).value = self.sm.item(i,1).text()
  9. else:
  10. dataItem[1] = ''
  11. sheet.cell(i+1, 2).value = ''
  12. self.replaceData[i] = dataItem[0] + ',' + dataItem[1]

PyQt5常用控件及方法(代码段)的更多相关文章

  1. EasyUI常用控件禁用方法

    EasyUI常用控件禁用方法: 1.validatebox可以用的用法:前两种适用于单个的validatebox; 第三种应用于整个form里面的输入框; <1>.$("#id& ...

  2. PyQt5——基本控件

    PyQt5基本控件使用方法详见:https://blog.csdn.net/jia666666/article/list/5?t=1& PyQt5基本控件汇总: 1.QMainWindow 2 ...

  3. winFrom 常用控件属性及方法介绍

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  4. C# 常用控件属性及方法介绍

      C#常用控件属性及方法介绍                                               目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox ...

  5. C#常用控件的属性以及方法(转载)

    -----以前看别人的,保存了下来,但是忘了源处,望见谅. C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichText ...

  6. 【转载】C#常用控件属性及方法介绍

    C#常用控件属性及方法介绍                                               目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文 ...

  7. C#常用控件介绍

                                                  目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTe ...

  8. C# 常用控件及单击事件

    1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: No ...

  9. B/S一些小知识及常用控件

    一: B/S网页的运行 页面在设计的时候,本身就是一个类.在运行的时间,是一个对象. 其中aspx和aspx.cs是在同一个类下. aspx是主要是负责界面,而aspx.cs主要是负责数据逻辑. 呈现 ...

随机推荐

  1. Gym101612H Hidden Supervisors

    题目链接:https://vjudge.net/problem/Gym-101612H 知识点: 贪心 解题思路: 我们称除了以 \(1\) 号结点为根的树以外的树为 “其他树”. 对于每一棵树,先自 ...

  2. CICD:Jenkins入门和使用

    最近,我们使用的开发服务器被回收了,换了一台新的服务器,CI/CD平台需要重新搭建. 我的运维能力一直薄弱,所以借此机会学习了一番如何使用Jenkins进行持续集成开发和部署,实践并踩了一些坑,在此记 ...

  3. 使用flask实现简单的文件上传

    from flask import Flask, redirect, render_template, request, url_forfrom werkzeug.utils import secur ...

  4. rancher证书过期

    背景 无法打开rancher服务,报错如下截图,可以看出是证书过期了无法连上k8s,注意这里的证书是rancher自身证书并非k8s证书. 解决方法 rancher升级:https://rancher ...

  5. Golang源码学习:调度逻辑(四)系统调用

    Linux系统调用 概念:系统调用为用户态进程提供了硬件的抽象接口.并且是用户空间访问内核的唯一手段,除异常和陷入外,它们是内核唯一的合法入口.保证系统的安全和稳定. 调用号:在Linux中,每个系统 ...

  6. CF1353E K-periodic Garland(贪心/dp)

    Question 有n盏灯,0代表暗,1代表亮,相邻两个1之间为周期k,求出最少的改变次数 Solution First 贪心方法 详见博客https://blog.csdn.net/cheng__y ...

  7. Robot Framework(12)- 详细解读 RF 的变量和常量

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 常量的栗子 常量 ...

  8. Jmeter(四) - 从入门到精通 - 创建网络测试计划(详解教程)

    1.简介 在本节中,您将学习如何创建基本的 测试计划来测试网站.您将创建五个用户,这些用户将请求发送到JMeter网站上的两个页面.另外,您将告诉用户两次运行测试.因此,请求总数为(5个用户)x(2个 ...

  9. 关键路径——CriticalPath算法

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. 关键路径: 即决定一项工程的完成时间的路径. 如下图所示 ...

  10. 最小生成树——Kruskal算法理解

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...