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

news2025/3/13 17:28:45

目录

一、创建一个简单的 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.coloradmin.cn/o/2292051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm 中的 Mark Directory As 的作用是什么?

文章目录 Mark Directory As 的作用PYTHONPATH 是什么PYTHONPATH 作用注意事项 Mark Directory As 的作用 可以查看官网:https://www.jetbrains.com/help/pycharm/project-structure-dialog.html#-9p9rve_3 我们这里以 Mark Directory As Sources 为例进行介绍。 这…

【C++】string类(上):string类的常用接口介绍

文章目录 前言一、C中设计string类的意义二、string类的常用接口说明1. string类对象的常见构造2. string类对象的容量操作2.1 size、capacity 和 empty的使用2.2 clear的使用2.3 reserve的使用2.4 resize的使用 3. string类对象的访问及遍历操作3.1 下标[ ] 和 at3.2 迭代器it…

从理论到实践:Linux 进程替换与 exec 系列函数

个人主页:chian-ocean 文章专栏-Linux 前言: 在Linux中,进程替换(Process Substitution)是一个非常强大的特性,它允许将一个进程的输出直接当作一个文件来处理。这种技术通常用于Shell脚本和命令行操作中…

3 卷积神经网络CNN

1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron,可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…

详解Linux系统的终端(Terminal)以及分类(各种tty开头的设备文件)

目录 终端(Terminal)的概念和作用终端(Terminal)在Linux中被视为设备,每个终端有自己的设备文件tty三个字母的来源(tty名字的来源)如何查看当前终端的设备文件常见终端的分类1-串口终端02-虚拟控制台终端(Virtual Console)03-伪终端(Pseudo T…

强化学习数学原理(五)——随机近似与随机

一、Motivating example 首先有个random variable(随机变量)X,我们的目标就是求出他的expectation E(x),我们有一些iid的采样,xi,从1到n,求出均值 但是如果有很多数据,我需要等很久,把所有数据都…

线性数据结构:单向链表

放弃眼高手低,你真正投入学习,会因为找到一个新方法产生成就感,学习不仅是片面的记单词、学高数......只要是提升自己的过程,探索到了未知,就是学习。 考虑到可能有小白在合并代码时出现各种细节问题,本文…

线程互斥同步

前言: 简单回顾一下上文所学,上文我们最重要核心的工作就是介绍了我们线程自己的LWP和tid究竟是个什么,总结一句话,就是tid是用户视角下所认为的概念,因为在Linux系统中,从来没有线程这一说法,…

《苍穹外卖》项目学习记录-Day11订单统计

根据起始时间和结束时间,先把begin放入集合中用while循环当begin不等于end的时候,让begin加一天,这样就把这个区间内的时间放到List集合。 查询每天的订单总数也就是查询的时间段是大于当天的开始时间(0点0分0秒)小于…

SAP HCM 回溯分析

最近总有人问回溯问题,今天把12年总结的笔记在这共享下: 12年开这个图的时候总是不明白是什么原理,教程看N次,网上资料找一大堆,就是不明白原理,后来为搞明白逻辑,按照教材的数据一样做&#xf…

Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法

Med-R2 : Crafting Trustworthy LLM Physicians through Retrieval and Reasoning of Evidence-Based Medicine Med-R2框架Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么How - 1. 前人研究的局限性How - 2. 你的创新方法/视角How - 3. 关键数据支持How - 4. 可…

bypass hcaptcha、hcaptcha逆向

可以过steam,已支持并发,欢迎询问! 有事危,ProfessorLuoMing

python-UnitTest框架笔记

UnitTest框架的基本使用方法 UnitTest框架介绍 框架:framework,为了解决一类事情的功能集合 UnitTest框架:是python自带的单元测试框架 自带的,可以直接使用,不需要格外安装 测试人员用来做自动化测试,作…

掌握API和控制点(从Java到JNI接口)_35 JNI开发与NDK 03

3、 如何载入 .so档案 VM的角色 由于Android的应用层级类别都是以Java撰写的,这些Java类别转译为Dex型式的Bytecode之后,必须仰赖Dalvik虚拟机器(VM: Virtual Machine)来执行之。 VM在Android平台里,扮演很重要的角色。此外,在执…

CDDIS从2025年2月开始数据迁移

CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov,并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。

VSCode设置内容字体大小

1、打开VSCode软件,点击左下角的“图标”,选择“Setting”。 在命令面板中的Font Size处选择适合自己的字体大小。 2、对比Font Size值为14与20下的字体大小。

嵌入式学习---蜂鸣器篇

1. 蜂鸣器分类 蜂鸣器是一种电子发声器件,采用直流电压供电,能够发出声音。广泛应用于计算机、打印机、报警器、电子玩具等电子产品中作为发声部件。一般仅从外形不易分辨蜂鸣器的种类。但是有些蜂鸣器使用广泛,见得多了就很容易分辨。例如常…

【优先算法】专题——前缀和

目录 一、【模版】前缀和 参考代码: 二、【模版】 二维前缀和 参考代码: 三、寻找数组的中心下标 参考代码: 四、除自身以外数组的乘积 参考代码: 五、和为K的子数组 参考代码: 六、和可被K整除的子数组 参…

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程: 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…

找不到msvcp140.dll解决方法

您可以尝试以下方案进行修复,看看是否可以解决这个问题: 一、重新注册 msvcp140.dll 运行库文件: “WinR”打开运行,键入:regsvr32 MSVCP140.dll,回车即可; 如果出现找不到该文件的提示&…