本文基于PyQt5 按钮Buttons样式设计,针对按钮添加响应的点击事件触发。
*.UI 源码
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>800</width> <height>600</height> </rect> </property> <property name="windowTitle"> <string>MainWindow</string> </property> <widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="horizontalLayoutWidget"> <property name="geometry"> <rect> <x>20</x> <y>30</y> <width>478</width> <height>80</height> </rect> </property> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QPushButton" name="pushButton_5"> <property name="minimumSize"> <size> <width>0</width> <height>48</height> </size> </property> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_4"> <property name="minimumSize"> <size> <width>0</width> <height>48</height> </size> </property> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_3"> <property name="minimumSize"> <size> <width>0</width> <height>48</height> </size> </property> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_2"> <property name="minimumSize"> <size> <width>0</width> <height>48</height> </size> </property> <property name="text"> <string>PushButton</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton"> <property name="minimumSize"> <size> <width>0</width> <height>48</height> </size> </property> <property name="text"> <string>PushButton</string> </property> </widget> </item> </layout> </widget> <widget class="QWidget" name="horizontalLayoutWidget_2"> <property name="geometry"> <rect> <x>20</x> <y>110</y> <width>478</width> <height>80</height> </rect> </property> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QPlainTextEdit" name="plainTextEdit"/> </item> </layout> </widget> </widget> </widget> <resources/> <connections> <connection> <sender>pushButton</sender> <signal>clicked()</signal> <receiver>plainTextEdit</receiver> <slot>zoomIn()</slot> <hints> <hint type="sourcelabel"> <x>362</x> <y>39</y> </hint> <hint type="destinationlabel"> <x>258</x> <y>149</y> </hint> </hints> </connection> <connection> <sender>pushButton_2</sender> <signal>clicked()</signal> <receiver>plainTextEdit</receiver> <slot>zoomIn()</slot> <hints> <hint type="sourcelabel"> <x>355</x> <y>69</y> </hint> <hint type="destinationlabel"> <x>258</x> <y>149</y> </hint> </hints> </connection> <connection> <sender>pushButton_3</sender> <signal>clicked()</signal> <receiver>plainTextEdit</receiver> <slot>zoomIn()</slot> <hints> <hint type="sourcelabel"> <x>258</x> <y>69</y> </hint> <hint type="destinationlabel"> <x>258</x> <y>149</y> </hint> </hints> </connection> <connection> <sender>pushButton_4</sender> <signal>clicked()</signal> <receiver>plainTextEdit</receiver> <slot>zoomIn()</slot> <hints> <hint type="sourcelabel"> <x>162</x> <y>69</y> </hint> <hint type="destinationlabel"> <x>258</x> <y>149</y> </hint> </hints> </connection> <connection> <sender>pushButton_5</sender> <signal>clicked()</signal> <receiver>plainTextEdit</receiver> <slot>zoomIn()</slot> <hints> <hint type="sourcelabel"> <x>65</x> <y>69</y> </hint> <hint type="destinationlabel"> <x>258</x> <y>149</y> </hint> </hints> </connection> </connections> </ui>
*.UI 源码 转换为*.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'untitled2.ui' # # Created by: PyQt5 UI code generator 5.15.4 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow StyleSheet = """ /*这里是通用设置,所有按钮都有效,不过后面的可以覆盖这个*/ QPushButton { border: none; /*去掉边框*/ } /* QPushButton#xxx 或者 #xx 都表示通过设置的objectName来指定 */ QPushButton#pushButton { background-color: #f44336; /*背景颜色*/ } #pushButton:hover { background-color: #e57373; /*鼠标悬停时背景颜色*/ } /*注意pressed一定要放在hover的后面,否则没有效果*/ #pushButton:pressed { background-color: #ffcdd2; /*鼠标按下不放时背景颜色*/ } #pushButton_2 { background-color: #4caf50; border-radius: 5px; /*圆角*/ } #pushButton_2:hover { background-color: #81c784; } #pushButton_2:pressed { background-color: #c8e6c9; } #pushButton_3 { background-color: #2196f3; /*限制最小最大尺寸*/ min-width: 96px; max-width: 96px; min-height: 96px; max-height: 96px; border-radius: 48px; /*圆形*/ } #pushButton_3:hover { background-color: #64b5f6; } #pushButton_3:pressed { background-color: #bbdefb; } #pushButton_4 { max-height: 48px; border-top-right-radius: 20px; /*右上角圆角*/ border-bottom-left-radius: 20px; /*左下角圆角*/ background-color: #ff9800; } #pushButton_4:hover { background-color: #ffb74d; } #pushButton_4:pressed { background-color: #ffe0b2; } /*根据文字内容来区分按钮,同理还可以根据其它属性来区分*/ #pushButton_5 { color: white; /*文字颜色*/ background-color: #9c27b0; } """ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 30, 478, 80)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.pushButton_5 = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.pushButton_5.setMinimumSize(QtCore.QSize(0, 48)) self.pushButton_5.setObjectName("pushButton_5") self.horizontalLayout.addWidget(self.pushButton_5) self.pushButton_4 = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.pushButton_4.setMinimumSize(QtCore.QSize(0, 48)) self.pushButton_4.setObjectName("pushButton_4") self.horizontalLayout.addWidget(self.pushButton_4) self.pushButton_3 = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.pushButton_3.setMinimumSize(QtCore.QSize(0, 48)) self.pushButton_3.setObjectName("pushButton_3") self.horizontalLayout.addWidget(self.pushButton_3) self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.pushButton_2.setMinimumSize(QtCore.QSize(0, 48)) self.pushButton_2.setObjectName("pushButton_2") self.horizontalLayout.addWidget(self.pushButton_2) self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.pushButton.setMinimumSize(QtCore.QSize(0, 48)) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(20, 110, 478, 80)) self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.plainTextEdit = QtWidgets.QPlainTextEdit(self.horizontalLayoutWidget_2) self.plainTextEdit.setObjectName("plainTextEdit") self.horizontalLayout_2.addWidget(self.plainTextEdit) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) # Qt Designer 设计器自动生成相关事件代码(信号/槽) # self.pushButton.clicked.connect(self.plainTextEdit.zoomIn) # self.pushButton_2.clicked.connect(self.plainTextEdit.zoomIn) # self.pushButton_3.clicked.connect(self.plainTextEdit.zoomIn) # self.pushButton_4.clicked.connect(self.plainTextEdit.zoomIn) # self.pushButton_5.clicked.connect(self.plainTextEdit.zoomIn) # 自定义函数进行相关(信号/槽)事件绑定 self.pushButton.clicked.connect(self.onClicked) self.pushButton_2.clicked.connect(self.onPressed) self.pushButton_3.clicked.connect(self.onReleased) self.pushButton_4.clicked.connect(self.onToggled) self.pushButton_5.clicked.connect(self.onToggled) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton_5.setText(_translate("MainWindow", "PushButton")) self.pushButton_4.setText(_translate("MainWindow", "PushButton")) self.pushButton_3.setText(_translate("MainWindow", "PushButton")) self.pushButton_2.setText(_translate("MainWindow", "PushButton")) self.pushButton.setText(_translate("MainWindow", "PushButton")) # 自定义按钮点击触发事件 def onClicked(self): self.plainTextEdit.appendPlainText( '按钮{0}被点击'.format(self.pushButton.objectName())) def onPressed(self): self.plainTextEdit.appendPlainText( '按钮{0}被按下'.format(self.pushButton_2.objectName())) def onReleased(self): self.plainTextEdit.appendPlainText( '按钮{0}被释放'.format(self.pushButton_3.objectName())) def onToggled(self, checked): self.plainTextEdit.appendPlainText( '按钮{0}被选中:{1}'.format(self.pushButton_4.objectName(), checked)) if __name__ == '__main__': app = QApplication(sys.argv) app.setStyleSheet(StyleSheet) MainWindow = QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
重点:
1、通过组件的ObjectName + 应用app的setStyleSheet(StyleSheet) 实现自定义样式绑定
2、通过组件的Clicked.connect() 绑定自定义函数。
# 自定义函数进行相关(信号/槽)事件绑定
self.pushButton.clicked.connect(self.onClicked) # pushButton 绑定onClicked 函数
self.pushButton_2.clicked.connect(self.onPressed)# pushButton_2绑定onPressed函数
self.pushButton_3.clicked.connect(self.onReleased)# pushButton_3绑定onReleased函数
self.pushButton_4.clicked.connect(self.onToggled)# pushButton_4绑定onToggled函数
self.pushButton_5.clicked.connect(self.onToggled)# pushButton_5 绑定onToggled函数
热门文章
- 「12月5日」最高速度18.5M/S,2024年Clash Nyanpasu每天更新免费节点订阅链接
- 「12月21日」最高速度21.6M/S,2024年Clash Nyanpasu每天更新免费节点订阅链接
- 「11月7日」最高速度20.9M/S,2024年Clash Nyanpasu每天更新免费节点订阅链接
- 「2月16日」最高速度22.8M/S,2025年Clash Nyanpasu每天更新免费节点订阅链接
- 「11月23日」最高速度21.3M/S,2024年Clash Nyanpasu每天更新免费节点订阅链接
- 动物疫苗一般在哪里打针的 动物疫苗在哪里购买
- 二手小型饲料颗粒机500元(二手大型饲料颗粒机)
- 「12月11日」最高速度23M/S,2024年Clash Nyanpasu每天更新免费节点订阅链接
- Rust如何开发eBPF应用
- 「1月22日」最高速度19.9M/S,2025年Clash Nyanpasu每天更新免费节点订阅链接