目录
[一、创建一个简单的 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. 处理键盘事件)
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
本身不提供布局管理功能,但可以使用 QVBoxLayout
、QHBoxLayout
等布局管理器来排列控件。
QVBoxLayout 是 PyQt4 中的一个布局管理器,用于将子控件(如按钮、文本框等)垂直排列。
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
方法来处理键盘事件:
pythondef keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Escape: self.close()
六、创建主窗口请使用QMainWindow
如果需要更复杂的窗口(例如带有菜单栏、状态栏),可以使用
QMainWindow
,而不是QWidget
。QMainWindow
是专门用于创建主窗口的类。
七、源代码
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-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。