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 本身不提供布局管理功能,但可以使用 QVBoxLayout、QHBoxLayout 等布局管理器来排列控件。
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,而不是QWidget。QMainWindow是专门用于创建主窗口的类。
七、源代码

# -*- 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-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。
相关文章:
PyQt4学习笔记1】使用QWidget创建窗口
目录 一、创建一个简单的 QWidget 窗口 二、设置窗口属性 1. 设置窗口标题 2. 设置背景颜色 3. 设置窗口大小和位置 4. 设置窗口模式 5. 关闭窗口 6. QWidget 及其子控件的样式 三、添加控件到 QWidget 1. 添加按钮 2. 添加标签 3. 添加文本框 4. 控件布局管理 四、自定义样式 …...
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…...
CSS关系选择器详解
CSS关系选择器详解 学习前提什么是关系选择器?后代选择器(Descendant Combinator)语法示例注意事项 子代选择器(Child Combinator)语法示例注意事项 邻接兄弟选择器(Adjacent Sibling Combinator࿰…...
C语言中的信号量
信号是操作系统中用来传递特定消息的机制。操作系统可以使用这种方式将程序运行过程中发生的各类特殊情况发送给程序,并按照其指定的逻辑进行处理。信号名称都以 “SIG” 作为前缀,如程序访问非法内存时,会产生名为 SIGSEGV 的信号。 程序需…...
求一个数的数根(高精度)
上一期我们讲的是求一个数的数根,和本期唯一不同的是,数据范围不同了,上一期这个数是小于等于10的18次方的,这一期是小于等于10的1000次方的,开一个变量?肯定不行,我们需要再开一个数组…...
从理论到实践: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,求出均值 但是如果有很多数据,我需要等很久,把所有数据都…...
图书管理系统 Axios 源码__获取图书列表
目录 核心功能 源码介绍 1. 获取图书列表 技术要点 适用人群 本项目是一个基于 HTML Bootstrap JavaScript Axios 开发的图书管理系统,可用于 添加、编辑、删除和管理图书信息,适合前端开发者学习 前端交互设计、Axios 数据请求 以及 Bootstrap 样…...
线性数据结构:单向链表
放弃眼高手低,你真正投入学习,会因为找到一个新方法产生成就感,学习不仅是片面的记单词、学高数......只要是提升自己的过程,探索到了未知,就是学习。 考虑到可能有小白在合并代码时出现各种细节问题,本文…...
线程互斥同步
前言: 简单回顾一下上文所学,上文我们最重要核心的工作就是介绍了我们线程自己的LWP和tid究竟是个什么,总结一句话,就是tid是用户视角下所认为的概念,因为在Linux系统中,从来没有线程这一说法,…...
《苍穹外卖》项目学习记录-Day11订单统计
根据起始时间和结束时间,先把begin放入集合中用while循环当begin不等于end的时候,让begin加一天,这样就把这个区间内的时间放到List集合。 查询每天的订单总数也就是查询的时间段是大于当天的开始时间(0点0分0秒)小于…...
SAP HCM 回溯分析
最近总有人问回溯问题,今天把12年总结的笔记在这共享下: 12年开这个图的时候总是不明白是什么原理,教程看N次,网上资料找一大堆,就是不明白原理,后来为搞明白逻辑,按照教材的数据一样做…...
JavaScript原型链与继承:优化与扩展的深度探索
在 JavaScript 的世界里,万物皆对象,而每个对象都有一个与之关联的原型对象,这就构成了原型链的基础。原型链,简单来说,是一个由对象的原型相互连接形成的链式结构 。每个对象都有一个内部属性[[Prototype]]࿰…...
五子棋对弈
问题描述 "在五子棋的对弈中,友谊的小船说翻就翻?" 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着"友谊第一,比赛第二"的宗旨,决…...
vue vscode插件推荐安装
在 VSCode 中开发 Vue,推荐安装以下插件: 核心插件 1. Volar(Vue Language Features) - Vue 3 官方推荐的开发工具,替代 Vetur。 This extension is deprecated. Use the Vue - Official extension instead. 1.Vue …...
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. 可…...
P7497 四方喝彩 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作,分四种: add ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v):对于所有 i ∈ [ l , r ] i \in [l,r…...
EtherCAT主站IGH-- 29 -- IGH之mailbox.h/c文件解析
EtherCAT主站IGH-- 29 -- IGH之mailbox.h/c文件解析 0 预览一 该文件功能`mailbox.c` 文件功能函数预览二 函数功能介绍`mailbox.c` 中主要函数的作用1. `ec_slave_mbox_prepare_send`2. `ec_slave_mbox_prepare_check`3. `ec_slave_mbox_check`4. `ec_slave_mbox_prepare_fetc…...
UI线程用到COM只能选单线程模型
无论用不用UI库,哪怕是用Win32 API手搓UI,UI线程要用COM的话,必须初始化为单线程单元(STA),即CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);,不能用MULTITHREADTHREADED。 实际上,很多(WPF等)UI库若…...
排序算法--桶排序
核心思想为分区间排序后合并。适用于数据均匀分布在一个范围内,或浮点数排序或范围明确的数据。如果需要处理整数或其他数据范围,可以通过调整BUCKET_RANGE的计算方式实现,例如对[0,100)的整数排序: int index arr[i] / 10; // …...
zsh安装插件
0 zsh不仅在外观上比较美观,而且其具有强大的插件,如果不使用那就亏大了。 官方插件库 https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins 官方插件库并不一定有所有的插件,比如zsh-autosuggestions插件就不再列表里,下面演示zs…...
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平台里,扮演很重要的角色。此外,在执…...
计算机组成原理——存储系统(二)
🌱 "人生最深的裂痕,往往是光照进来的地方。 别怕脚下的荆棘,那是你与平庸划清界限的勋章;别惧眼前的迷雾,星辰永远藏在云层之上。真正的强者不是从未跌倒,而是把每一次踉跄都踏成攀登的阶梯。记住&am…...
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下的字体大小。...
