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

目录

[一、创建一个简单的 QWidget 窗口](#一、创建一个简单的 QWidget 窗口)

二、设置窗口属性

[1. 设置窗口标题](#1. 设置窗口标题)

[2. 设置背景颜色](#2. 设置背景颜色)

[3. 设置窗口大小和位置](#3. 设置窗口大小和位置)

[4. 设置窗口模式](#4. 设置窗口模式)

[5. 关闭窗口](#5. 关闭窗口)

[6. QWidget 及其子控件的样式](#6. QWidget 及其子控件的样式)

[三、添加控件到 QWidget](#三、添加控件到 QWidget)

[1. 添加按钮](#1. 添加按钮)

[2. 添加标签](#2. 添加标签)

[3. 添加文本框](#3. 添加文本框)

[4. 控件布局管理](#4. 控件布局管理)

四、自定义样式

五、常见事件

[1. 处理鼠标点击事件](#1. 处理鼠标点击事件)

[2. 处理键盘事件](#2. 处理键盘事件)

六、创建主窗口请使用QMainWindow

七、源代码


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

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

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

python 复制代码
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. 设置窗口大小和位置

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

4. 设置窗口模式

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

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

5. 关闭窗口

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

python 复制代码
self.close()

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

6. QWidget 及其子控件的样式

python 复制代码
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):在指定索引位置插入一个控件。

python 复制代码
# 创建布局
# 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 方法来处理键盘事件:

python 复制代码
def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_Escape:
        self.close()

六、创建主窗口请使用QMainWindow

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

七、源代码

python 复制代码
# -*- 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-------------------------

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

相关推荐
LUCIAZZZ几秒前
介绍一下Mybatis的底层原理(包括一二级缓存)
java·数据库·spring boot·mybatis
麻溜学习30 分钟前
网工_CSMA/CD协议
笔记
charlie11451419133 分钟前
计算机网络笔记再战——理解几个经典的协议2
网络·笔记·网络协议·计算机网络·协议·基础学习
smart_ljh1 小时前
k8s二进制集群之ETCD集群证书生成
数据库·k8s·etcd
ooo-p1 小时前
FPGA学习篇——开篇之作
学习·fpga开发
朝九晚五ฺ1 小时前
【Linux探索学习】第二十八弹——信号(下):信号在内核中的处理及信号捕捉详解
linux·运维·服务器·学习
Tassel_YUE2 小时前
napalm_ce 报错 No module named ‘netmiko.ssh_exception‘ 解决方案(随手记)
运维·python·ssh·netmiko·网络自动化
西猫雷婶2 小时前
python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理
python·opencv·计算机视觉
醉暮天2 小时前
2.5学习记录
学习
一只各种都搞一下的攻城狮2 小时前
3天用AI辅助完成资源卫星高光谱数据基本处理软件
python·ai辅助·遥感光谱·几何校正