zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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 事件范例,左边是输入字符串;右边是单击按钮后,把所输入的文字显示在按钮下的标签中
PyQt5 事件范例,左边是输入字符串;右边是单击按钮后,把所输入的文字显示在按钮下的标签中