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

    def changeEvent(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 沖突

 

 

  
 
        

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM