PyQt5 调研(一)

东西预备

编辑器: vscode OR Pycharm

vscode须要装置PYQT Integration 以及 Python 插件, Pycharm须要设置External Tools

pycharm设置External Tools

  • 设置Qtdesigner.exe

program挑选Qtdesigner.exe的途径, Arguments: $FilePath$, work directory: $FileDir$

  • 设置PyUI, 将UI文件转换成Python文件

program: python, Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py, work direactory: $FileDir$

规划绘制

没有规划的控件不会跟着窗口的转变而转变,关于规划,看这个Qt规划博客

第一个控件: tableView

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(3, 1).setBackground(QtGui.QBrush(QtGui.QColor(255, 255, 0)))

# 根据编号排序
self.sm.sort(1, QtCore.Qt.DescendingOrder)

# 将数据模型绑定到QTableView
self.tableView.setModel(self.sm)

for c in range(self.tableView.horizontalHeader().count()):
    self.tableView.horizontalHeader().setSectionResizeMode(c) // 设置列宽自动添补·
  • 关于动态新增行:对model举行操纵就行,tableView会感应到数据变化

信号与槽

晓得vue,react的事宜机制会对pyqt的信号与槽机制的明白提供方便。

  • 起首,定义自定义信号

insertSuccess = pyqtSignal(str, str)

个中pyqtSignal来自于from PyQt5.QtCore import pyqtSignal, insertSuccess信号会照顾两个字符串范例的数据。

  • 然后,在子窗口发射这个信号
self.name = self.lineEdit.text()
self.no = self.lineEdit_2.text()
self.hide()
self.insertSuccess.emit(self.name, self.no)
  • 终究,在父窗口槽函数接收这个信号
 myDia = childWindow(self)
 myDia.insertSuccess.connect(self.deal_insert)

self.deal_insert就是槽函数,用来接收信号

def deal_insert(self, name, no):
    print('name: ', name, 'no: ', no)
    原文作者:ddsdchdsd
    原文地址: https://segmentfault.com/a/1190000019398768
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞