当前位置: 首页 > article >正文

PyQt4学习笔记1】使用QWidget创建窗口

目录

一、创建一个简单的 QWidget 窗口

二、设置窗口属性

1. 设置窗口标题

2. 设置背景颜色

3. 设置窗口大小和位置

4. 设置窗口模式

5. 关闭窗口

6. QWidget 及其子控件的样式

三、添加控件到 QWidget

1. 添加按钮

2. 添加标签

3. 添加文本框

4. 控件布局管理

四、自定义样式

五、常见事件

1. 处理鼠标点击事件

2. 处理键盘事件

六、创建主窗口请使用QMainWindow

七、源代码


QWidget 是 PyQt4 中所有用户界面组件的基类,它可以用来创建窗口、对话框、自定义控件等。以下是一些关于 QWidget 的使用方法和常见操作。

一、创建一个简单的 QWidget 窗口

以下是一个基本的示例,展示如何创建一个 QWidget 窗口:

from PyQt4 import QtGui
import sys

# 创建一个简单的窗口
class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.init()

    def init(self):
        # 设置窗口标题和大小
        self.setWindowTitle("QWidget Example")
        self.setGeometry(100, 100, 300, 200)

        # 显示窗口
        self.show()

# 启动应用
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)  # PyQt中最重要的对象,代表整个程序。
    window = MyWindow()
    sys.exit(app.exec_())

二、设置窗口属性

QWidget 提供了一些方法来设置窗口的基本属性,例如背景颜色、窗口大小、窗口模式等。

1. 设置窗口标题

self.setWindowTitle("Custom Window Title")

2. 设置背景颜色

self.setStyleSheet("background-color: lightblue;")

3. 设置窗口大小和位置

self.move(x, y)  # 只设置窗口的位置
self.resize(width, height)  # 只设置窗口的大小
self.setGeometry(x, y, width, height)  # 设置窗口的位置和大小

4. 设置窗口模式

QWidget 可以以不同的模式显示,例如普通窗口、浮动窗口(弹出窗口)。

# 强制窗口为最上层窗口(模式窗口)
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

5. 关闭窗口

一般配合按钮点击事件使用。

self.close()

self.button.clicked.connect(self.close)  # 按钮点击事件

6. QWidget 及其子控件的样式

self.setStyleSheet("""
    QWidget {
        background-color: #f0f0f0;
    }
    QPushButton {
        background-color: #4CAF50;
        color: white;
        padding: 10px;
    }
""")  # 为 QWidget 及其子控件设置自定义样式。

三、添加控件到 QWidget

可以在 QWidget 上添加各种控件,例如按钮、标签、文本框等。

1. 添加按钮

button = QtGui.QPushButton("Click Me", self)
button.move(50, 50)  # 设置按钮的位置

2. 添加标签

label = QtGui.QLabel("Hello, QWidget!", self)
label.move(50, 100)

3. 添加文本框

text_box = QtGui.QLineEdit(self)
text_box.move(50, 150)
text_box.resize(200, 30)

4. 控件布局管理

QWidget 本身不提供布局管理功能,但可以使用 QVBoxLayoutQHBoxLayout 等布局管理器来排列控件。

1. QVBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)垂直排列。
2. QHBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)横向排列。

# addWidget(widget):将一个控件添加到布局中。
# setSpacing(spacing):设置控件之间的间距(以像素为单位)。
# setContentsMargins(left, top, right, bottom):设置布局的边距。
# setAlignment(widget, alignment):设置控件的对齐方式。
# insertWidget(index, widget):在指定索引位置插入一个控件。

# 创建布局
# 1. QVBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)垂直排列。
# 2. QHBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)横向排列。
layout = QtGui.QVBoxLayout()  # 创建一个 QVBoxLayout 实例
layout.addWidget(label)  # 将控件添加到布局中
layout.addWidget(button)
layout.addWidget(text_box)
layout.setSpacing(60)  # 设置控件之间的间距(以像素为单位)。
layout.setContentsMargins(10, 20, 30, 40)  # 设置布局的边距。
self.setLayout(layout)  # 将布局设置到窗口或部件中
# addWidget(widget):将一个控件添加到布局中。
# setSpacing(spacing):设置控件之间的间距(以像素为单位)。
# setContentsMargins(left, top, right, bottom):设置布局的边距。
# setAlignment(widget, alignment):设置控件的对齐方式。
# insertWidget(index, widget):在指定索引位置插入一个控件。

四、自定义样式

可以通过 setStyleSheet 方法为 QWidget 及其子控件设置自定义样式。

self.setStyleSheet("""
    QWidget {
        background-color: #f0f0f0;
    }
    QPushButton {
        background-color: #4CAF50;
        color: white;
        padding: 10px;
    }
""")

五、常见事件

QWidget 支持多种事件处理,例如鼠标点击事件、键盘事件等。

1. 处理鼠标点击事件

可以通过重写 mousePressEvent 方法来响应鼠标点击事件:

def mousePressEvent(self, event):
    QtGui.QMessageBox.information(self, "Mouse Event", "Mouse clicked at ({}, {})".format(event.x(), event.y()))

2. 处理键盘事件

可以通过重写 keyPressEvent 方法来处理键盘事件:

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_Escape:
        self.close()

六、创建主窗口请使用QMainWindow

如果需要更复杂的窗口(例如带有菜单栏、状态栏),可以使用 QMainWindow,而不是 QWidgetQMainWindow 是专门用于创建主窗口的类。

七、源代码

# -*- coding: utf-8 -*-
from PyQt4 import QtGui, QtCore
import sys


# 创建一个简单的QWidget窗口
class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.init()

    def init(self):
        self.setWindowTitle("QtGui Example")  # 设置窗口标题
        self.resize(400, 300)  # 设置窗口的宽和高,只设置大小
        self.setStyleSheet("""
            QWidget {
                background-color: #f0f0f0;
            }
            QPushButton {
                background-color: #4CAF50;
                color: white;
                padding: 10px;
            }
        """)  # 为 QWidget 及其子控件设置自定义样式。
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  # 强制窗口为最上层窗口(模式窗口)

        # 添加控件到 QWidget
        # 1. 添加按钮
        button = QtGui.QPushButton("Click Me", self)  # 创建一个按钮,并添加到QWidget窗口
        button.move(50, 50)  # 设置按钮的位置,move() 方法用于设置窗口或控件的位置,只控制控件的左上角坐标,不改变控件的大小。
        # button.setGeometry(100, 100, 100, 30)  # 设置按钮的位置,setGeometry() 方法用于设置窗口或控件的位置和大小。它同时控制了控件的左上角坐标以及控件的宽度和高度。
        # button.move(x, y)  # 只设置位置
        # button.resize(width, height)  # 只设置大小
        # button.setGeometry(x, y, width, height)  # 设置位置和大小

        # 2. 添加标签
        label = QtGui.QLabel("Hello, QWidget!", self)
        label.move(50, 100)

        # 3. 添加文本框
        text_box = QtGui.QLineEdit(self)
        text_box.move(50, 150)
        text_box.resize(200, 30)

        # 创建布局
        # 1. QVBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)垂直排列。
        # 2. QHBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)横向排列。
        layout = QtGui.QVBoxLayout()  # 创建一个 QVBoxLayout 实例
        layout.addWidget(label)  # 将控件添加到布局中
        layout.addWidget(button)
        layout.addWidget(text_box)
        layout.setSpacing(60)  # 设置控件之间的间距(以像素为单位)。
        layout.setContentsMargins(10, 20, 30, 40)  # 设置布局的边距。
        self.setLayout(layout)  # 将布局设置到窗口或部件中
        # addWidget(widget):将一个控件添加到布局中。
        # setSpacing(spacing):设置控件之间的间距(以像素为单位)。
        # setContentsMargins(left, top, right, bottom):设置布局的边距。
        # setAlignment(widget, alignment):设置控件的对齐方式。
        # insertWidget(index, widget):在指定索引位置插入一个控件。

        # 显示窗口
        self.show()

    # 可以通过重写 mousePressEvent 方法来响应鼠标点击事件:
    def mousePressEvent(self, event):
        QtGui.QMessageBox.information(self, "Mouse Event", "Mouse clicked at ({}, {})".format(event.x(), event.y()))

    # 可以通过重写 keyPressEvent 方法来处理键盘事件:
    # 以下是一个经典的通过设置键盘事件来做到通过按下Esc关闭窗口
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

# 启动应用
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()  # 创建窗口
    sys.exit(app.exec_())  # 运行应用程序

 ------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。


http://www.kler.cn/a/531934.html

相关文章:

  • Kubernetes学习之包管理工具(Helm)
  • 如何在电脑上部署deepseek
  • 在K8S中,如何把某个worker节点设置为不可调度?
  • 集合通讯概览
  • 经典本地影音播放器MPC-BE.
  • EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站
  • Kubernetes服务网格实战:从理论到落地
  • 经典本地影音播放器MPC-BE.
  • 动手学深度学习-3.1线性回归 问题汇总
  • 指导初学者使用Anaconda运行GitHub上One - DM项目的步骤
  • Python玄学
  • 【Jax和Flax介绍】
  • redis实际开发应用简单实现
  • c语言练习题【数据类型、递归、双向链表快速排序】
  • 14-9-3C++STL的set容器
  • C语言按位取反【~】详解,含原码反码补码的0基础讲解【原码反码补码严格意义上来说属于计算机组成原理的范畴,不过这也是学好编程初级阶段的必修课】
  • 安装nvm后报错
  • 计算机网络中常见高危端口有哪些?如何封禁高危端口?
  • nvm的安装和使用
  • VSCode源码分析参考资料
  • Java自定义IO密集型和CPU密集型线程池
  • OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)
  • 【6. 深入理解 C++ 中的常量】
  • G1. Yunli‘s Subarray Queries (easy version)
  • Java 大视界 -- Java 大数据在智能电网中的应用与发展趋势(71)
  • 2月3日星期一今日早报简报微语报早读