天天看點

listview pyqt5 添加_pyqt5 控件篇

from PyQt5.QtWidgets import *

from PyQt5.QtGui import QStandardItemModel, QStandardItem

from PyQt5.QtCore import QSize, QPoint, QRect, QModelIndex

import sys

class Example(QMainWindow): # 繼承QMainWindow

#初步介紹常用控件的用法,以後會單獨介紹每種控件的詳細用法

def __init__(self):

super().__init__()

self.setUi()

def setUi(self):

self.statusBar().showMessage('statusbar')

self.setGeometry(300, 300, 300, 300)

self.setWindowTitle('test')

self.setMouseTracking(True)

self.setFixedSize(800, 400)

#==============PushButton

self.pushButton = QPushButton(self)

self.pushButton.setStyleSheet('text-align: center;'

'width:60;'

'height:40;'

'background:yellow;') # 竟然支援css 很強大

self.pushButton.setText('這是一個測試按鈕')

#===============Label

self.label = QLabel(self)

self.label.setGeometry(QRect(10, 130, 300, 40))

self.label.setText('我是label标簽')

#===============comboBox

self.comboBox = QComboBox(self)

self.comboBox.setGeometry(QRect(10, 60, 100, 60))

itemdata = ['item0', 'item1', 'item2']

self.comboBox.addItems(itemdata)

self.comboBox.currentIndexChanged.connect(self._comboxChanged)

#設定目前預設item index = 0 第一個選項

self.comboBox.setCurrentIndex(0)

#=-=============listWidget 普通listview 或者 widget不能添加表頭,要使用表頭請使用 treeView

self.listWidget = QListWidget(self)

self.listWidget.addItems(['item1', 'item2', 'item3'])

self.listWidget.setGeometry(QRect(10, 160, 160, 100))

self.listWidget.setFixedWidth(60) # 設定固定寬度

self.listWidget.itemClicked.connect(self._listClicked)

#===============treeWidget

self.treeWidget = QTreeWidget(self)

self.treeWidget.setGeometry(QRect(170, 160, 160, 100))

headers = ['head1', 'head2', 'head3']

self.treeWidget.setColumnCount(3)

self.treeWidget.setColumnWidth(0, 50)

self.treeWidget.setColumnWidth(1, 50)

self.treeWidget.setColumnWidth(2, 50)

self.treeWidget.setHeaderLabels(headers)

#===============tableWidget

self.tableWidget = QTableWidget(self)

self.tableWidget.setGeometry(QRect(340, 160, 224, 100))

self.tableWidget.setColumnCount(3)

self.tableWidget.setColumnWidth(0, 60)

self.tableWidget.setColumnWidth(1, 60)

self.tableWidget.setColumnWidth(2, 60)

self.tableWidget.setHorizontalHeaderLabels(('head1', 'head2', 'head3'))

self.tableWidget.setSelectionMode(QTableWidget.NoSelection)

self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed) # 表頭不可拖動

self.tableWidget.itemClicked.connect(self._tableItem_OnClicked) # item被點選事件

#初始化十行 row 注意 row 與 item 的差別

for count in range(10):

self.tableWidget.insertRow(count)

#填充列項

self.tableWidget.setItem(count, 0, QTableWidgetItem('item0'))

self.tableWidget.setItem(count, 1, QTableWidgetItem('item1'))

self.tableWidget.setItem(count, 2, QTableWidgetItem('item2'))

self.show()

def _comboxChanged(self, index):

self.label.setText('comboboxChanged: index-%d item-%s' %(index, self.comboBox.itemText(index)))

def _listClicked(self, item):

print(item.text())

index = self.listWidget.indexFromItem(item) #type: QModelIndex # 資料模型 用來定位資料,行資訊,列資訊,item文本等

print(index.row()) #擷取所在行

def _tableItem_OnClicked(self, item):

tmp = item #type: QTableWidgetItem

print(tmp.text())

print(self.tableWidget.indexFromItem(tmp).row()) #擷取所在行

def mousePressEvent(self, e): #滑鼠點選事件

if e.button() ==Qt.LeftButton:print('leftbutton clicked')elif e.button() ==Qt.RightButton:

self.popMenu.exec(self.cursor().pos()) #彈出菜單

print('x:', e.x(), 'y:', e.y()) #這裡x y坐标是全局坐标 轉換成client 需要用mapFromGlobal

defchangeEvent(self, e):print(e.type()) #type 代表改變事件的類型,并不是指具體的事件,比如視窗狀态的改變,并沒有說具體的視窗狀态

if self.windowState() ==Qt.WindowMinimized:print('視窗最小化')elif self.windowState() ==Qt.WindowMaximized:print('視窗最大化')

if __name__ == '__main__': app =QApplication(sys.argv)

ex=Example()

sys.exit(app.exec_())#防止和python exec 沖突