PyQt5 調研(一)

工具準備

編輯器: vscode OR Pycharmvue

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佈局博客python

第一個控件: 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的信號與槽機制的理解提供方便。react

  • 首先,定義自定義信號
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就是槽函數,用來接受信號ide

def deal_insert(self, name, no):
    print('name: ', name, 'no: ', no)
相關文章
相關標籤/搜索