PySide6開發桌面程序,PySide6入門實戰(上)

文章目錄

  • 系列文章索引
  • 一、前期準備
    • 1、簡介及安裝
    • 2、PyCharm PySide6環境搭建
      • (1)基礎環境
      • (2)配置QT Designer、PyUIC、PyRCC
      • (3)使用pyside6項目
      • (4)資源文件編寫與編譯
  • 二、QT常用控件
    • 1、Qt窗口類
    • 2、QLineEdit、QLabel、QPushButton
    • 3、QCheckBox(復選框)及其信號槽
    • 4、QComboBox下拉框
    • 5、QTextEdit、QTextBrowser顯示文本
    • 6、QListView、QListWidget
    • 7、QStackedWidget
    • 8、QTabWidget
  • 三、布局
    • 1、概述
    • 2、彈簧控件QSpacerltem
    • 3、布局里常用的函數
    • 4、柵格布局
    • 5、表單布局
    • 6、分裂器布局
    • 7、絕對布局
  • 四、信號槽與事件機制
    • 1、普通槽函數使用
    • 2、鼠標事件
    • 3、鍵盤事件
    • 4、組合按鍵事件
    • 5、事件過濾
  • 五、QMainWindow使用介紹
    • 1、簡介
    • 2、菜單欄
    • 3、工具欄
    • 4、狀態欄
    • 5、QDockWidget

系列文章索引

PySide6開發桌面程序,PySide6入門實戰(上)
PySide6開發桌面程序,PySide6入門實戰(下)

一、前期準備

1、簡介及安裝

(1)為什么用PySide而不是PyQt
PyQt是由 Riverbank Computing 公司開發,出現的比較早;它采用GPLV3許可證和商業許可證;這表示你如果使用PyOt,則必須將你的代碼進行開源;如果要閉源,則需要購買商業許可。
https://riverbankcomputing.com/software/pyqt/intro

PySide是 Ot 官方開源的Python Qt庫,出現的時間要比PyOt晚的多,這也是很多人知道PyOt不知道PySide的原因;但隨著版本的選代,PvSide越來越強大,目前最新的是PvSide6,建議直接學PvSide6。https://doc.qt.io/qtforpython-6/

(2)QT開發常見技術棧
C++ QWidget;
C++ QML;
Qt5、Qt6;
PyQt5、PyQt6;
PySide2、PySide6;
Python QML。

(3)安裝pyside6

pip install pyside6 -i https://mirror.baidu.com/pypi/simple

2、PyCharm PySide6環境搭建

(1)基礎環境

win10/win11 64位,安裝python環境(可以用Anaconda),安裝PyCharm。

(2)配置QT Designer、PyUIC、PyRCC

1、安裝好PySide6之后,會下載這些:
在這里插入圖片描述
2、配置PySide6_designer:(Qt設計器,可以往窗口上拖控件,設置布局,快速構建窗口,文件后綴.ui)
Program:C:\Users\Admin\.conda\envs\pyside6\Scripts\pyside6-designer.exe
Arguments不需要 填。
Working directory:$ProjectFileDir$
在這里插入圖片描述
3、配置PySide6_uic(將.ui文件編譯為python代碼)
Program:C:\Users\Admin\.conda\envs\pyside6\Scripts\pyside6-uic.exe
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working directory:$ProjectFileDir$
在這里插入圖片描述

4、配置PySide6_rcc(將資源文件.qrc編譯為python代碼)
Program:C:\Users\Admin\.conda\envs\pyside6\Scripts\pyside6-rcc.exe
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working directory:$ProjectFileDir$
在這里插入圖片描述

5、此時,右鍵項目,就會有這幾個工具了:
在這里插入圖片描述
運行之后,返回碼是0就說明成功。

(3)使用pyside6項目

1、右鍵項目,選擇我們安裝的Designer,就可以拖動組件,創建一個ui布局了,保存之后,會保存在項目根路徑。
這是一個xml文件,雙擊可以再次打開。
在這里插入圖片描述
在這里插入圖片描述
2、右鍵ui文件,生成python代碼
在這里插入圖片描述
在這里插入圖片描述
3、編寫MainWindowImpl.py繼承主窗口

import LoginWindow# 定義一個子類,自定義邏輯可以寫在子類
class MainWindowImpl(LoginWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 可以寫自定義邏輯#self.lineEdit.setText("user")

4、編寫主類

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
import MainWindowImplif __name__ == '__main__':app = QApplication(sys.argv)mw = QMainWindow()impl = MainWindowImpl.MainWindowImpl(mw)mw.show()sys.exit(app.exec())  # 進入QT事件循環# 也可以不用子類,直接這樣寫,但是自定義邏輯不太好寫,每次修改ui會覆蓋代碼
# if __name__ == '__main__':
#     app = QApplication(sys.argv)
# 
#     mw = QMainWindow()
#     mwReal = MainWindow.Ui_MainWindow()
#     mwReal.setupUi(mw)
#     mw.show()
# 
#     sys.exit(app.exec())  # 進入QT事件循環

(4)資源文件編寫與編譯

1、右鍵,new file :Resources.qrc
同時添加上資源文件。

<!DOCTYPE RCC>
<RCC version="1.0"><qresource><file alias="logo">./Resources/test.jpg</file></qresource>
</RCC>

2、qrc文件右鍵,進行rcc編譯
在這里插入圖片描述
3、使用圖片資源

import sys
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QMainWindow
import MainWindowImpl
# 引入資源!!一定要做的
import Resourcesif __name__ == '__main__':app = QApplication(sys.argv)# 使用資源,使用別名app.setWindowIcon(QIcon(':logo'))mw = QMainWindow()impl = MainWindowImpl.MainWindowImpl(mw)mw.show()sys.exit(app.exec())  # 進入QT事件循環

在這里插入圖片描述

二、QT常用控件

1、Qt窗口類

Qt包含三個窗口類:QMainWindow、QWidget、QDialog
在這里插入圖片描述
其中,MainWindow,是包含標題欄、菜單欄更加豐富的窗口。

2、QLineEdit、QLabel、QPushButton

(1)ui布局
另存為CalcMainWindow.ui,并使用uic生成python文件。
在這里插入圖片描述
(2)編寫子類
可以給按鈕添加點擊事件。
添加子類的目的是,防止每次編輯了ui,自己的代碼被覆蓋了。

from PySide6.QtWidgets import QMessageBox
import CalcMainWindowclass CalcMainWindowImpl(CalcMainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# pushButton的點擊事件,這是那個按鈕的objectNameself.pushButton.clicked.connect(self.onCalc)# 槽函數def onCalc(self):# 獲取第一個和第二個輸入框的內容,獲取的時候是字符串,需要轉換str1 = self.lineEdit1.text().strip()str2 = self.lineEdit2.text().strip()if len(str1) == 0 or len(str2) == 0:QMessageBox.warning(None, 'Warning', '請輸入兩個加數')returnnum1 = float(str1)num2 = float(str2)result = num1 + num2self.lineEdit3.setText(str(result))

(3)主類

import sys
from PySide6.QtWidgets import QApplication, QMainWindowimport CalcMainWindowImplif __name__ == '__main__':app = QApplication(sys.argv)mw = QMainWindow()impl = CalcMainWindowImpl.CalcMainWindowImpl(mw)mw.show()sys.exit(app.exec())  # 進入QT事件循環

(4)運行結果
在這里插入圖片描述

3、QCheckBox(復選框)及其信號槽

(1)ui
ui保存命名為MainWindow
在這里插入圖片描述
(2)編寫子類

import MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# checkBox狀態改變事件的監聽self.checkBox1.stateChanged.connect(self.onCheckBox1StateChanged)def onCheckBox1StateChanged(self, state):# 沒選中是0,選中后是2if state == 0:print("Checked")if state == 2:print("Un Checked")

4、QComboBox下拉框

(1)ui
在這里插入圖片描述
(2)編寫子類

import MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 設置下拉值self.comboBox.addItem("Option 0")self.comboBox.addItem("Option 1")self.comboBox.addItem("Option 2")self.comboBox.addItem("Option 3")# 默認選項self.comboBox.setCurrentIndex(2)# 設置信號槽 索引改變事件監聽,選項變化時會調用self.comboBox.currentIndexChanged.connect(self.comboBoxCurrentIndexChanged)# 用戶一個選項發出時,參數是所選項的索引,還有個重載版本,str類型的,參數是文本self.comboBox.activated.connect(self.comboBoxActivated)def comboBoxCurrentIndexChanged(self, index):print('comboBoxCurrentIndexChanged切換到了' + str(index))def comboBoxActivated(self, index):print('comboBoxActivated切換到了' + str(index))

(3)QComboBox的信號
QComboBox常用的信號包括:
activated(int):當用戶選擇一個項時發出,參數是所選項的索引。
activated(str):重載版本,當用戶選擇一個項時發出,參數是所選項的文本。
currentlndexChanged(int):當下拉列表的當前項改變時發出,參數是新的當前項的索引。
currentTextChanged(str):當下拉列表的當前項文本改變時發出,參數是新的當前項的文本。
highlighted(int):當用戶在下拉列表中高亮一個項時發出,參數是高亮項的索引。

5、QTextEdit、QTextBrowser顯示文本

(1)兩者區別
QTextBrowser 繼承自 QTextEdit,具有所有 QTextEdit 的功能,并添加了一些額外的功能,特別是用于顯示超鏈接和導航功能的能力,類似于一個簡易的網頁瀏覽器。QTextBrowser 可以顯示靜態的HTML文檔,并支持超鏈接互動。這使得 QTextBrowser 非常適合用作顯示只讀的、格式化的文本內容,比如幫助文檔。

用途:QTextEdit 更適合用于文本編輯,而 QTextBrowser 更適合用于顯示格式化的只讀文本
導航功能:QTextBrowser支持鏈接導航,可以處理內部的超鏈接事件。
只讀屬性:QTextBrowser 默認是只讀的,而 QTextEdit 默認是可編輯的。

總的來說,如果你需要讓用戶編輯文本,那么 QTextEdit 是更好的選擇。而如果你需要展示帶有超鏈接的只讀文本,QTextBrowser是更合適的選擇。

(2)ui
在這里插入圖片描述
在這里插入圖片描述
(3)編寫子類

import MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 給textEdit設置文本self.textEdit.setText("123456")# textEdit文本變更事件self.textEdit.textChanged.connect(self.onTextChanged)# 給textBrowser設置HTML內容self.textBrowser.setHtml("""<h1>Hello World</h1><p>link to <a href="https://www.python.org">Python website</a></p>""")self.textBrowser.setText("""<h1>Hello World</h1><p>link to <a href="https://www.python.org">Python website</a></p>""")# 設置可以打開超鏈接self.textBrowser.setOpenExternalLinks(True)def onTextChanged(self):# 獲取里面的文本print(self.textEdit.toPlainText())

6、QListView、QListWidget

(1)兩者區別
QListWidget是一個更高級的控件,提供了接口來添加、刪除和管理列表項。
不需要單獨設置數據模型(Model),因為QListWidget內部就是一個簡單的數據模型。對于簡單的列表需求,比如只需展示文本列表項,QListWidget可能是更簡單直接的選擇。

QListView屬于Model/View框架,是一個更靈活、更低級的控件,它需要與一個數據模型(Model)配合使用。
QListView僅僅是一個視圖組件,它不存儲任何數據,所有的數據都存儲在它所連接的模型中。這意味著你需要創建或使用一個數據模型(如QStandardltemModel、自定義模型等),并將其設置給QListView來顯示數據。由于是基于模型/視圖的,QListView可以用來展示更復雜的數據結構,提供了更高的自定義性和靈活性。你可以控制數據的表示、存儲和行為。

如果需求相對簡單,比如只需要顯示一個文本列表,并對列表項進行一些基本操作,那么QListWidget可能是更簡單的選擇。
但如果你需要更高的靈活性和定制性,比如顯示復雜的數據結構或者需要自定義數據的展示方式,那么使用QListView配合一個合適的數據模型會是更好的選擇,也就是說QListView更適合用于需要高度定制或展示復雜數據的場景。
(2)ui
在這里插入圖片描述
(3)子類

from PySide6.QtCore import QStringListModel
from PySide6.QtWidgets import QListWidgetItemimport MainWindow
from CustomListItem import CustomListItemclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# QListWidgetfirstItem = CustomListItem()item = QListWidgetItem(self.listWidget)item.setSizeHint(firstItem.sizeHint())# 可以設置自定義的QWidgetself.listWidget.setItemWidget(item, firstItem)# 添加列表項for i in range(10):item = QListWidgetItem(f'item0{i}')self.listWidget.addItem(item)# QListViewmodel = QStringListModel(['itemstr1', 'itemstr2', 'itemstr3', 'itemstr4'])self.listView.setModel(model)

(4)自定義的QWidget

from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout, QCheckBox, QPushButton, QMessageBox# 自定義QWidget
class CustomListItem(QWidget):def __init__(self):super().__init__()self.setFixedSize(100, 50)main_hLay = QHBoxLayout()leftLabel = QLabel()leftLabel.setFixedSize(50, 50)leftLabel.setText('A')main_hLay.addWidget(leftLabel)vLay = QVBoxLayout()ck = QCheckBox()ck.setText('開啟')ck.setFixedSize(50, 20)btn = QPushButton()btn.setFixedSize(50, 25)btn.setText('智能潤色')vLay.addWidget(ck)vLay.addWidget(btn)main_hLay.addLayout(vLay)self.setLayout(main_hLay)btn.clicked.connect(self.onBtnRunse)def onBtnRunse(self):QMessageBox.information(None, '提示', '智能潤色')

(5)運行效果
在這里插入圖片描述

7、QStackedWidget

(1)ui
兩個ui,其中Widget是QStackedWidget的一個頁面。
QStackedWidget默認會創建出兩個頁面,需要我們刪除。
在這里插入圖片描述
在這里插入圖片描述
(2)子頁面

import MainWindow
import MyWidget
import Pages# 自定義Widget
class MyWidgetImpl(MyWidget.Ui_Form):def __init__(self, Widget):super().__init__()self.setupUi(Widget)
from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabel, QLineEditclass Page1(QWidget):def __init__(self):super().__init__()hLay = QHBoxLayout()label = QLabel()label.setText('page1')hLay.addWidget(label)lineEdit = QLineEdit()lineEdit.setText('這是第一個頁面')hLay.addWidget(lineEdit)self.setLayout(hLay)class Page2(QWidget):def __init__(self):super().__init__()hLay = QHBoxLayout()label = QLabel()label.setText('page2')hLay.addWidget(label)self.setLayout(hLay)

(3)編寫子類

from PySide6.QtWidgets import QWidgetimport MainWindow
import MyWidgetImpl
import Pagesclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 將自定義的QWidget添加到stackedWidgetpage1 = Pages.Page1()page2 = Pages.Page2()page3 = QWidget()MyWidgetImpl.MyWidgetImpl(page3)self.stackedWidget.addWidget(page1)self.stackedWidget.addWidget(page2)self.stackedWidget.addWidget(page3)# ComBobox添加東西,隨著下拉框可以切換頁面self.comboBox.addItems(['Page1', 'Page2', 'Page3'])self.comboBox.currentIndexChanged.connect(self.onComboBoxIndexChanged)def onComboBoxIndexChanged(self, index):self.stackedWidget.setCurrentIndex(index)

(4)效果
在這里插入圖片描述

8、QTabWidget

QTabWidget提供了一個選項卡式的界面,允許用戶在不同的頁面(tab)之間切換。每個頁面都是一個獨立的小部件,可以包含各種界面元素。

(1)ui
在這里插入圖片描述
(2)子頁面

from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabelclass Tab1(QWidget):def __init__(self):super().__init__()hLay = QHBoxLayout()label = QLabel()label.setText('tab1')hLay.addWidget(label)self.setLayout(hLay)class Tab2(QWidget):def __init__(self):super().__init__()hLay = QHBoxLayout()label = QLabel()label.setText('tab2')hLay.addWidget(label)self.setLayout(hLay)class Tab3(QWidget):def __init__(self):super().__init__()hLay = QHBoxLayout()label = QLabel()label.setText('tab3')hLay.addWidget(label)self.setLayout(hLay)

(3)編寫子類

import MainWindow
import TabWidgetclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)tab1 = TabWidget.Tab1()tab2 = TabWidget.Tab2()tab3 = TabWidget.Tab3()# 添加頁面,位置、Widget、名稱self.tabWidget.insertTab(0, tab1, 'tab01')self.tabWidget.insertTab(1, tab2, 'tab02')self.tabWidget.insertTab(2, tab3, 'tab03')

三、布局

1、概述

各種布局可以多嘗試,很多復雜的設計,都是由一個個的Widget整合在一起的。

就像是html的一個個div等控件一樣,設置位置。
在這里插入圖片描述

2、彈簧控件QSpacerltem

添加彈簧控件通常指的是在布局中添加一個可伸縮的空白區域,以便控件可以按照需要展開或收縮。
這通常是用于在控件之間添加空間,或者將控件推向布局的邊緣。

spacer = QSpacerltem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
layout.addSpacerltem(spacer)
'''
在上面的例子中,QSpacerltem的構造函數接收四個參數:
1.寬度(40)
2.高度(20)
3.寬度策略(OSizePolicy.Expanding)這意味著彈簧控件可以擴展,以填充布局中的任何額外空間。
4.高度策略OSizePolicy.Minimum):這意味著彈簧控件的高度保持最小值不會擴展。通過將OSpacerltem添加到布局中,Button1和Button2會被推到窗口的兩側
'''

在這里插入圖片描述

3、布局里常用的函數

addWidget(widget,stretch=0):將小部件添加到布局中。stretch參數用于指定小部件拉伸的比例。
addLayout(layout,stretch=0):將另一個布局嵌套到當前布局中。這允許創建復雜的布局結構。
setSpacing(spacing):設置布局中小部件之間的間距。
setMargin(margin):設置布局邊緣與其容器邊緣之間的距離。在最新版本的Qt中,可能需要使用setContentsMargins()來替代此功能。
setAlignment(widget,alignment):設置小部件相對于其分配空間的對齊方式例如,Qt.AlignCenter、Qt.AlignLeft等。

4、柵格布局

在這里插入圖片描述

5、表單布局

QFormLayout設計上主要用于單列布局,每一行通常包含一個標簽和一個字段(或者兩個相關的窗口小部件),因此它自然支持多行但本質上是單列的布局。對于需要多行多列布局的情況,則需要使用QGridLayout。
在這里插入圖片描述

6、分裂器布局

分裂器布局,兩個組件之間是可以拖動的
在這里插入圖片描述

7、絕對布局

move(x, y)
對于一些位置固定的控件,需要使用絕對布局,直接根據坐標寫位置。
如果有藍湖設計圖,絕對布局很輕松。

在這里插入圖片描述

四、信號槽與事件機制

1、普通槽函數使用

from PySide6.QtWidgets import QMessageBox
import MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 槽函數,綁定鼠標點擊按鈕事件self.pushButton.clicked.connect(self.onPushButtonClicked)def onPushButtonClicked(self):QMessageBox.information(None, "Hello", "Hello World")

2、鼠標事件

from PySide6.QtCore import Qtimport MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)window.setMouseTracking(True)  # 開啟鼠標追蹤# 事件 ,注意,事件是在QWidget中的window.mousePressEvent = self.mousePressEventwindow.mouseReleaseEvent = self.mouseReleaseEventwindow.mouseMoveEvent = self.mouseMoveEventwindow.wheelEvent = self.wheelEventwindow.mouseDoubleClickEvent = self.mouseDoubleClickEventdef mousePressEvent(self, event):if event.button() == Qt.LeftButton:print("左鍵")elif event.button() == Qt.RightButton:print("右鍵")elif event.button() == Qt.MiddleButton:print("中鍵")def mouseReleaseEvent(self, event):if event.button() == Qt.LeftButton:print("左鍵釋放")elif event.button() == Qt.RightButton:print("右鍵釋放")elif event.button() == Qt.MiddleButton:print("中鍵釋放")def mouseDoubleClickEvent(self, event):if event.button() == Qt.LeftButton:print("左鍵雙擊")elif event.button() == Qt.RightButton:print("右鍵雙擊")elif event.button() == Qt.MiddleButton:print("中鍵雙擊")def mouseMoveEvent(self, event):print("鼠標移動")print("x:", event.x(), "y:", event.y())def wheelEvent(self, event):print("鼠標滾輪")print("滾動值:", event.angleDelta().y())y = event.angleDelta().y()# mac和windows的滾動方向相反  y > 0 向上滾動  y < 0 向下滾動if y > 0:print(f"y = {y}")print("向上滾動")else:print(f"y = {y}")print("向下滾動")

3、鍵盤事件

from PySide6.QtCore import Qtimport MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)window.keyPressEvent = self.keyPressEventwindow.keyReleaseEvent = self.keyReleaseEventdef keyPressEvent(self, event):key = event.key()print(f"按下了鍵盤鍵:{event.text()}")if key == Qt.Key_Escape:print(f"按下了鍵盤esc鍵:{event.text()}")elif key == Qt.Key_Enter or key == Qt.Key_Return:print(f"按下了鍵盤回車鍵:{event.text()}")def keyReleaseEvent(self, event):print(f"釋放了鍵盤鍵:{event.text()}")

4、組合按鍵事件

from PySide6.QtCore import Qtimport MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)window.mousePressEvent = self.mousePressEventwindow.mouseReleaseEvent = self.mouseReleaseEventwindow.keyPressEvent = self.keyPressEventwindow.keyReleaseEvent = self.keyReleaseEventdef mousePressEvent(self, event):if event.modifiers() & Qt.ControlModifier:if event.button() == Qt.LeftButton:print('ctrl +鼠標左鍵')def mouseReleaseEvent(self, event):print('按鍵已彈起')def keyPressEvent(self, event):key = event.key()if event.modifiers() & Qt.ControlModifier:if key == Qt.Key_S:print('ctrl + S')def keyReleaseEvent(self, event):print('按鍵已彈起')

5、事件過濾

from PySide6.QtCore import Qt, QEvent
from PySide6.QtWidgets import QLineEdit, QVBoxLayoutimport MainWindowclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# lineEdit添加過濾器self.lineEdit.installEventFilter(window)window.eventFilter = self.eventFilterdef eventFilter(self, watched, event):if event.type() == QEvent.KeyPress:# 空格、enter等不允許輸入if event.key() in (Qt.Key_Backspace, Qt.Key_Enter, Qt.Key_Return, Qt.Key_Delete):return False# 數字不允許輸入if event.text().isdigit():return Falsereturn Truereturn False

在這里插入圖片描述

五、QMainWindow使用介紹

1、簡介

QMainWindow包含菜單欄、工具欄、狀態欄等。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2、菜單欄

注意,使用QT設計器,菜單欄的子菜單是無法直接輸入中文的,需要粘貼進去
在這里插入圖片描述

import MainWindow
import Resources # 資源!class MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 注意,圖標貌似只能選一些內置的,想要自定義圖片,需要手動設置self.action.setIcon(QIcon(':test'))# 菜單信號,點擊事件self.action.triggered.connect(self.actionTriggered)def actionTriggered(self):print('點擊了')

3、工具欄

工具欄需要手動添加:
在這里插入圖片描述
在這里插入圖片描述

from PySide6.QtGui import QIconimport MainWindow
import Resourcesclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 注意,圖標貌似只能選一些內置的,想要自定義圖片,需要手動設置self.action.setIcon(QIcon(':t1'))# 工具欄信號,點擊事件self.action.triggered.connect(self.actionTriggered)def actionTriggered(self):print('點擊了')

4、狀態欄

import MainWindow
import Resourcesclass MainWindowImpl(MainWindow.Ui_MainWindow):def __init__(self, window):super().__init__()self.setupUi(window)# 狀態欄,設置文字self.statusbar.showMessage('初始狀態')

5、QDockWidget

使用 addDockwidget()將停靠窗口添加到主窗口的不同區域(例如左側、頂部、底部或者右側)。
QDockWidget 可以通過用戶操作在停靠狀態和浮動狀態之間切換

#創建停靠窗口
dock = QDockWidget("Dockable",self)
self.addDockWidget(Qt.RightDockWidgetArea, dock)

注意:dockwidget只能在QMainWindow里使用,QWidget、QDialog不行
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41781.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41781.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41781.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

排序矩陣查找

題目鏈接 排序矩陣查找 題目描述 注意點 每一行、每一列都按升序排列 解答思路 可以從右上角開始遍歷&#xff0c;如果當前元素就等于target&#xff0c;直接返回true&#xff1b;如果當前元素小于target&#xff0c;則target肯定在當前位置下方&#xff1b;如果當前元素大…

基于深度學習的電力分配

基于深度學習的電力分配是一項利用深度學習算法優化電力系統中的電力資源分配、負荷預測、故障檢測和系統管理的技術。該技術旨在提高電力系統的運行效率、穩定性和可靠性。以下是關于這一領域的系統介紹&#xff1a; 1. 任務和目標 電力分配的主要任務是優化電力系統中的電力…

挑戰杯 LSTM的預測算法 - 股票預測 天氣預測 房價預測

0 簡介 今天學長向大家介紹LSTM基礎 基于LSTM的預測算法 - 股票預測 天氣預測 房價預測 這是一個較為新穎的競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f9ff; 更多資料, 項目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

手機飛行模式是什么意思?3個方法教你如何開啟

在現代生活中&#xff0c;手機已經成為我們日常生活中不可或缺的一部分。然而&#xff0c;有時我們需要暫時切斷手機的通信功能&#xff0c;比如在飛機上、開會時或需要安靜休息的時候。這時候&#xff0c;蘋果手機上的“飛行模式”功能就派上了用場。 那么&#xff0c;手機飛…

人臉表情識別Facial Expression Recognition基于Python3和Keras2(TensorFlow后端)

人臉表情識別項目是一個結合了計算機視覺和深度學習技術的高級應用&#xff0c;主要用于分析和理解人類面部表情所傳達的情感狀態。這樣的系統可以用于多種場景&#xff0c;比如情緒分析、用戶交互、市場調研、醫療診斷以及人機接口等領域。 一個典型的人臉表情識別項目可以分…

端到端自動駕駛新突破:Nvidia提出全并行PARA-Drive,斬獲CVPR挑戰賽冠軍

論文標題&#xff1a; PARA-Drive: Parallelized Architecture for Real-time Autonomous Driving 論文作者&#xff1a; Xinshuo Weng, Boris Ivanovic, Yan Wang, Yue Wang, Marco Pavone 導讀&#xff1a; 本文系統分析了自動駕駛高級架構的設計空間&#xff0c;提出了關…

了解安全端口

安全端口的定義和重要性 安全端口是指在網絡通信中&#xff0c;用于特定服務或應用程序的端口&#xff0c;這些端口通常被設計為在網絡層面提供額外的安全性。安全端口的選擇和配置對于保護網絡資源免受未經授權的訪問和攻擊至關重要。 常見的安全端口及其用途 以下是一些常見…

提升內容分享類營銷效果的秘籍大公開

今天有豐富實戰經驗的“蚓鏈數字化營銷平臺”來給大家分享一些能有效提高內容分享類數字化營銷方案中用戶的參與度和轉化率的方法。 創造有價值且引人入勝的內容 一定要讓分享的內容實用、有趣或者獨特&#xff0c;滿足大家的需求和興趣。多運用生動的故事、案例和數據來支持觀…

深入分析 Android BroadcastReceiver (十)(完)

文章目錄 深入分析 Android BroadcastReceiver (十)1. 深入理解 Android 廣播機制的高級應用與實踐1.1 高級應用1.1.1 示例&#xff1a;廣播啟動服務1.1.2 示例&#xff1a;數據變化通知1.1.3 示例&#xff1a;下載完成通知 1.2 實踐建議1.2.1 設置權限1.2.2 動態注冊和注銷廣播…

WIN32核心編程 - 線程操作(二) 同步互斥

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> 鏈接點擊跳轉博客主頁 目錄 競態條件 CriticalSection Mutex CriticalSection & Mutex Semaphore Event 競態條件 多線程環境下&#xff0c;當多個線程同時訪問或者修改同一個數據時&#xff0c;最終結果為線程執…

探索企業信用巔峰:3A企業認證的魅力與價值

在現代商業環境中&#xff0c;企業的信用和信譽是其發展的核心要素之一。3A企業認證作為信用評級的最高等級&#xff0c;正在吸引越來越多企業的關注。究竟什么是3A企業認證&#xff1f;它為什么對企業如此重要&#xff1f;本文將深入探討3A企業認證的獨特魅力和巨大價值。 3A企…

0Day漏洞防御篇:GeoServer CVE-2024-36401遠程代碼執行漏洞

GeoServer是一個用Java編寫的開源軟件服務器&#xff0c;允許用戶共享和編輯地理空間數據。它為提供交互操作性而設計&#xff0c;使用開放標準發布來自任何主要空間數據源的數據。GeoServer存在遠程代碼執行漏洞&#xff08;CVE-2024-36401&#xff09;&#xff0c;未經身份認…

Spring整合SpringSecurity

SpringSecurity基礎使用 SpringSecurity是一個安全框架&#xff0c;主要功能是認證和授權 從Spring入手SpringSecurity 1. Spring整合SpringSecurity applicationContext.xml <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http…

大模型幻覺問題知識點總結

大模型幻覺問題知識點總結 定義&#xff1a; 大模型幻覺問題是指在自然語言處理&#xff08;NLP&#xff09;中&#xff0c;基于大規模預訓練模型&#xff08;如GPT-3、BERT等&#xff09;生成的文本看似合理且連貫&#xff0c;但實際上包含錯誤、不準確或虛假的信息。這種現象…

Aigtek高壓放大器指標有哪些要求和標準

高壓放大器是一類關鍵的電子設備&#xff0c;用于放大電信號并提供強大的輸出。在不同的應用領域&#xff0c;高壓放大器可能有不同的要求和標準。以下是一些常見的高壓放大器指標要求和標準&#xff0c;以確保其性能和可靠性&#xff1a; 1.幅度增益和頻率響應 高壓放大器的主…

人大金倉攜手中國一汽引領國產數據庫行業新浪潮

在國產化政策的推動下,人大金倉攜手中國一汽聯合開發更貼近汽車產業特定需求的數據庫功能和組件。從2023年2月至今,人大金倉已累計部署690套數據庫,適配應用系統170個,支撐中國一汽20多個核心系統和重要系統。目前,中國一汽在國內企業數據庫國產化替換率遙遙領先。此次合作為國…

貓咪健康新選擇!福派斯鮮肉貓糧里的果蔬纖維大揭秘

你們是不是對福派斯鮮肉貓糧中那些豐富的果蔬粗纖維特別好奇呢&#xff1f;&#x1f914; 其實&#xff0c;這些看似簡單的粗纖維&#xff0c;對貓咪的健康可是大有裨益的&#xff01; 粗纖維在貓糧中起到多種重要作用&#xff0c;并且對貓咪的健康和消化系統有著顯著的影響。以…

熱門開源項目推薦:探索開源世界的精彩

熱門開源項目推薦 隨著開源程序的發展&#xff0c;越來越多的程序員開始關注并加入開源大模型的行列。開源不僅為個人學習和成長提供了絕佳的平臺&#xff0c;也為整個技術社區帶來了創新和進步。無論你是初學者還是經驗豐富的開發者&#xff0c;參與開源項目都能讓你受益匪淺…

鄉村振興指數與其30個原始變量數據(Shp/Dta/Excel格式,2000-2022年)

數據簡介&#xff1a;這份數據是我國各地級市鄉村振興指數與其30各原始變量數據并對其進行地圖可視化表達。城鎮化是當今中國社會經濟發展的必由之路。當前我國城鎮化處于發展的關鍵時期&#xff0c;但城鎮化發展的加快卻是一把雙刃劍&#xff0c;為何要如此形容呢?因為當前城…

職升網:一級注冊計量師就業方向如何?

首先我們要知道&#xff0c;一級注冊計量師可以聘為工程師&#xff0c;可以負責計量基準和標準的量值傳遞工作。它可以從事一下7個方面的工作&#xff1a; 1.負責制定計量管理制度、工作計劃、并組織實施&#xff1b; 2.建設期參與設計工程等計量方面的工作&#xff0c;編制計…