PyQt5 布局管理与事件范例
事件 管理 布局 PyQT5 范例
2023-09-14 09:12:59 时间
PyQt5 布局管理与事件范例
以下 PyQt5 范例用来展示布局管理与事件,使用 QHBoxLayout 或 QVBoxLayout,来分别创建横向布局或纵向布局。所有的 GUI 程序都是事件驱动的。事件主要由用户触发,但也可能有其他触发方式:例如网络连接、窗口管理器或定时器。在事件模型中,有三个参与者:
- 事件源:事件源是状态发生变化的对象,它会生成事件。 Clicked
- 事件对象:事件(对象)封装了事件源中状态的变动。QPushButton
- 事件接收者:事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。btn_showLabel
PyQt5 有一个独特的信号槽 (signal slot) 机制来处理事件。信号槽用于对象间的通信,信号 (signal) 在某一特定事件发生时被触发,槽 (slot) 可以是任何调用的 (callable) 对象,当 signal 触发时会调用与之相连的 slot。下例中的 btn.clicked 是 signal,而 self.btn_showLabel 则是与之相连的 slot。
import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QVBoxLayout,
QPushButton, QApplication)
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI() #界面绘制交给InitUi方法
def initUI(self):
self.lbl = QLabel('Please input a String',self)
self.input = QLineEdit('',self)
btn = QPushButton('Button', self)
self.lblResult = QLabel('Result',self)
btn.clicked.connect(self.btn_showLabel)
layout = QVBoxLayout()
layout.addWidget(self.lbl)
layout.addWidget(self.input)
layout.addWidget(btn)
layout.addWidget(self.lblResult)
self.setLayout(layout)
#设置窗口的位置和大小
self.setGeometry(300, 300, 300, 220)
#设置窗口的标题
self.setWindowTitle('PtQt5 Window Example')
#设置窗口的图标
self.setWindowIcon(QIcon('python.png'))
#显示窗口
self.show()
def btn_showLabel(self):
print('btn clicked')
self.lblResult.setText(self.input.text())
if __name__ == '__main__':
#创建应用程序和对象
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
下图显示程序执行成果,因为布局为设定为纵向布局 (QHBoxLayout),所以控件会以纵向的方式,由上而下的排列。左边是输入字符串在文字方块控件内,右边是单击按钮后,把所输入的文字显示在按钮下的标签中。
PyQt5 事件范例,左边是输入字符串;右边是单击按钮后,把所输入的文字显示在按钮下的标签中