Python----PyQt开发(PyQt高级:组件大小,界面位置,按钮,文本显示,文本输入,字体大小)
一、大小
setMinimumSize(width, height)
描述:
设置控件的最小尺寸。控件不会被缩小到比这个尺寸更小的大小。
参数:
width: 最小宽度(以像素为单位)。
height: 最小高度(以像素为单位)。
button.setMinimumSize(100, 50) # 设置按钮的最小大小为宽100高50像素
setMaximumSize(width, height)
描述:
设置控件的最大尺寸。控件不会被扩大到比这个尺寸更大的大小。
参数:
width: 最大宽度(以像素为单位)。
height: 最大高度(以像素为单位)。
button.setMaximumSize(200, 100) # 设置按钮的最大大小为宽200高100像素
setFixedSize(width, height)
描述:
设置控件的固定尺寸。控件的大小将被固定,不可调整。
参数:
width: 固定宽度(以像素为单位)。
height: 固定高度(以像素为单位)。
button.setFixedSize(150, 75) # 设置按钮的固定大小为宽150高75像素
resize(width, height)
描述:
调整控件的当前大小。与 setFixedSize 不同,此方法允许控件在其最小和最大尺寸范围内调整大小。
参数:
width: 新宽度(以像素为单位)。
height: 新高度(以像素为单位)。
button.resize(120, 60) # 调整按钮的大小为宽120高60像素
size()
描述:
获取控件的当前大小,返回一个 QSize 对象,包含控件的当前宽度和高度。
返回值:
QSize 对象。
current_size = button.size() # 获取按钮的当前大小
print("Width:", current_size.width(), "Height:", current_size.height())
minimumSize()
描述:
获取控件设置的最小大小,返回一个 QSize 对象。
返回值:
QSize 对象。
min_size = button.minimumSize() # 获取按钮的最小大小
print("Minimum Width:", min_size.width(), "Minimum Height:", min_size.height())
maximumSize()
描述:
获取控件设置的最大大小,返回一个 QSize 对象。
返回值:
QSize 对象。
max_size = button.maximumSize() # 获取按钮的最大大小
print("Maximum Width:", max_size.width(), "Maximum Height:", max_size.height())
setContentsMargins(left, top, right, bottom)
描述:
设置控件内容与边缘之间的边距。边距影响控件的可用绘制区域。
参数:
left: 左边距(以像素为单位)。
top: 上边距(以像素为单位)。
right: 右边距(以像素为单位)。
bottom: 下边距(以像素为单位)。
widget.setContentsMargins(10, 10, 10, 10) # 设置所有边距为10像素
二、位置
2.1、设置窗口在桌面的显示位置
要在桌面上设置窗口的位置,可以使用 move(x, y) 方法。
参数:
x: 窗口左上角的水平位置(以像素为单位)。
y: 窗口左上角的垂直位置(以像素为单位)。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
# 创建窗口实例
window = QWidget()
window.setWindowTitle("My Window")
# 设置窗口位置 (100, 100) 在桌面上
window.move(100, 100)
# 设置窗口大小
window.resize(400, 300)
# 显示窗口
window.show()
sys.exit(app.exec_())
2.2、窗口位置居中
cursor_pos = QCursor.pos()
QCursor.pos():
描述: 这个静态方法返回当前鼠标光标的位置,返回的是一个 QPoint 对象,表示光标在屏幕上的坐标(以像素为单位)。
用途: 你可以用这个位置来确定光标当前在哪个屏幕上,或者在鼠标悬停时获取控件的位置信息。
current_screen = app.screenAt(cursor_pos)
app.screenAt(cursor_pos):
描述: screenAt() 方法用于返回当前光标所在位置的屏幕对象。这个方法是 QApplication 类的一部分,接受一个 QPoint 参数(光标位置),并返回一个 QScreen 对象。
用途: 通过这个方法,你可以获取到光标所在的屏幕的信息,例如屏幕的尺寸、分辨率等。
screen_ret = current_screen.availableGeometry()
current_screen.availableGeometry():
描述: 这个方法返回一个 QRect 对象,表示当前屏幕上可用的几何区域(即可以用来放置窗口的区域),通常不包括任务栏、菜单栏等占用屏幕空间的部分。
用途: 你可以使用这个信息来决定窗口的位置和大小,确保窗口不会被任务栏或其他系统界面元素遮挡。
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QCursor
import sys
if __name__ == '__main__':
# 创建 QApplication 实例,管理 GUI 应用程序的控制流程和主设置
app = QApplication(sys.argv)
# 创建主窗口 (QWidget)
windows = QWidget()
# 设置窗口标题为 '设置居中'
windows.setWindowTitle('设置居中')
# 获取当前鼠标光标在屏幕上的位置
cursor_pos = QCursor.pos()
# 在光标位置获取对应的屏幕
current_screen = app.screenAt(cursor_pos)
if current_screen is not None:
# 获取当前屏幕的可用几何区域(大小和位置)
creen_ret = current_screen.availableGeometry()
# 计算屏幕宽度和高度的一半
width = creen_ret.width() * 0.5
height = creen_ret.height() * 0.5
# 将窗口调整为屏幕可用宽度和高度的一半
windows.resize(width, height)
# 将窗口移动到屏幕的中心位置
windows.move(width * 0.5, height * 0.5)
# 打印当前屏幕的可用几何区域(用于调试)
print(creen_ret) # 输出 QRect(矩形区域)表示可用几何区域
print(creen_ret.width()) # 输出可用区域的宽度
print(creen_ret.height()) # 输出可用区域的高度
print(creen_ret.left()) # 输出可用区域的左侧位置
print(creen_ret.top()) # 输出可用区域的顶部位置
left=creen_ret.left()
top=creen_ret.top()
# 显示主窗口
windows.show()
# 启动应用程序的事件循环
app.exec()
三、按钮--QPushButton
QPushButton 是一个可以被用户点击的按钮。可以通过 setText("Button Text") 设置按钮的文本,通过连接信号(如 clicked)来定义按钮被点击时触发的行为。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextBrowser # 导入所需的PyQt5模块
import sys # 导入sys模块以处理命令行参数和退出程序
class Wight(QWidget): # 定义一个名为 Wight 的类,继承自 QWidget
def __init__(self):
super().__init__() # 调用父类的构造函数,初始化父类的属性
self.ui_init() # 调用自定义的 UI 初始化方法
self.setWindowTitle('按钮') # 设置窗口的标题
self.resize(800, 800) # 设置窗口的大小为800x800像素
self.move(555, 255) # 设置窗口在屏幕上的位置,坐标为(555, 255)
def ui_init(self):
# 初始化用户界面
self.show_btn = QPushButton(self) # 创建一个 QPushButton 实例,并将其设置为当前窗口的子控件
self.show_btn.setText('按钮') # 设置按钮的文本为"按钮"
self.show_btn.setGeometry(350, 50, 100, 100) # 设置按钮的位置和大小,位置(350, 50),宽100高100像素
self.show_btn.clicked.connect(lambda: print("这是一个按钮的点击事件")) # 当按钮被点击时,输出提示信息
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建 QApplication 实例,传递命令行参数
w = Wight() # 创建 Wight 窗口实例
w.show() # 显示窗口
app.exec() # 进入应用程序主循环,等待事件处理
四、QTextBrowser
QTextBrowser 是一个用于显示和编辑富文本的控件,支持HTML格式。它可以显示多行文本并允许添加链接。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextBrowser # 导入所需的 PyQt5 模块
import sys # 导入 sys 模块以处理命令行参数和退出程序
class Wight(QWidget): # 定义一个名为 Wight 的类,继承自 QWidget
def __init__(self):
super().__init__() # 调用父类的构造函数,初始化父类(QWidget)的属性
self.ui_init() # 调用自定义的 UI 初始化方法
self.setWindowTitle('文本介绍') # 设置窗口的标题为 "文本介绍"
self.resize(800, 800) # 设置窗口的大小为 800x800 像素
self.move(555, 255) # 设置窗口在屏幕上的位置,坐标为 (555, 255)
def ui_init(self):
# 初始化用户界面
self.show_text = QTextBrowser(self) # 创建一个 QTextBrowser 实例,并将其设置为当前窗口的子控件
self.show_text.setGeometry(175, 200, 400, 400) # 设置 QTextBrowser 的位置和大小,位置 (175, 200),宽 400 高 400 像素
# 设置文本内容,介绍 QPushButton 的用法
self.show_text.setText(
'QPushButton 是一个可以被用户点击的按钮。'
'可以通过 setText("Button Text") 设置按钮的文本,'
'通过连接信号(如 clicked)来定义按钮被点击时触发的行为。'
)
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建 QApplication 实例,传递命令行参数
w = Wight() # 创建 Wight 窗口实例
w.show() # 显示窗口
app.exec() # 进入应用程序主循环,等待事件处理
五、QPushButton与QTextBrowser结合
这是一个按钮与文本结合使用的,它将会以故宫位主要材料,通过点击按钮使文本出现故宫的介绍为主要内容,将会通过两种形式呈现这一方法的实现
5.1、纯编程
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextBrowser # 导入所需的 PyQt5 模块
import sys # 导入 sys 模块以处理命令行参数和退出程序
class Wight(QWidget): # 定义一个名为 Wight 的类,继承自 QWidget
def __init__(self):
super().__init__() # 调用父类的构造函数,初始化父类(QWidget)的属性
self.ui_init() # 调用自定义的 UI 初始化方法
self.setWindowTitle('故宫介绍') # 设置窗口的标题为 "故宫介绍"
self.resize(800, 800) # 设置窗口的大小为 800x800 像素
self.move(555, 255) # 设置窗口在屏幕上的位置,坐标为 (555, 255)
self.slot_init() # 调用槽函数初始化方法,连接按钮的信号
def ui_init(self):
# 初始化用户界面
self.show_btn = QPushButton(self) # 创建一个 QPushButton 实例,并将其设置为当前窗口的子控件
self.show_btn.setText('按钮') # 设置按钮的文本为 "按钮"
self.show_btn.setGeometry(350, 50, 100, 100) # 设置按钮的位置和大小,位置 (350, 50),宽 100 高 100 像素
self.show_text = QTextBrowser(self) # 创建一个 QTextBrowser 实例,用于显示文本
self.show_text.setGeometry(75, 200, 600, 400) # 设置 QTextBrowser 的位置和大小,位置 (75, 200),宽 600 高 400 像素
def slot_init(self):
# 初始化信号与槽的连接
self.show_btn.clicked.connect(self.show_info) # 当按钮被点击时,连接到 show_info 方法
def show_info(self):
# 定义显示故宫介绍的文本
data = '''
故宫又称紫禁城。中国古代讲究“天人合一”的规划理念,
用天上的星辰与都城规划相对应,以突出政权的合法性和
皇权的至高性。天帝居住在紫微宫,而人间皇帝自诩为受
命于天的“天子”,其居所应象征紫微宫以与天帝对应,
《后汉书》载“天有紫微宫,是上帝之所居也。王者立宫,
象而为之”。紫微、紫垣、紫宫等便成了帝王宫殿的代
称。由于封建皇宫在古代属于禁地,常人不能进入,故称为
“紫禁”。明朝初期同外禁垣一起统称“皇城”,大约明朝中晚
期,与外禁垣区分开来,即宫城叫“紫禁城”,外禁垣为“皇城”。
'''
self.show_text.setText(data) # 将文本内容设置到 QTextBrowser 中显示
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建 QApplication 实例,传递命令行参数
w = Wight() # 创建 Wight 窗口实例
w.show() # 显示窗口
app.exec() # 进入应用程序主循环,等待事件处理
5.2、通过Designer 设计,代码完成交互
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(534, 393)
self.show_btn = QtWidgets.QPushButton(Form)
self.show_btn.setGeometry(QtCore.QRect(60, 160, 71, 51))
self.show_btn.setObjectName("show_btn")
self.textBrowser = QtWidgets.QTextBrowser(Form)
self.textBrowser.setGeometry(QtCore.QRect(180, 30, 321, 341))
self.textBrowser.setObjectName("textBrowser")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.show_btn.setText(_translate("Form", "故宫按钮"))
from untitled import Ui_Form
import sys
from PyQt5.QtWidgets import QApplication,QWidget
class Mywindows(QWidget,Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle('我是故宫')
self.solt_init()
def solt_init(self):
self.show_btn.clicked.connect(self.show_info)
def show_info(self):
data = '''故宫又称紫禁城。中国古代讲究“天人合一”的规划理念,
用天上的星辰与都城规划相对应,以突出政权的合法性和
皇权的至高性。天帝居住在紫微宫,而人间皇帝自诩为受
命于天的“天子”,其居所应象征紫微宫以与天帝对应,
《后汉书》载“天有紫微宫,是上帝之所居也。王者立宫,
象而为之”。紫微、紫垣、紫宫等便成了帝王宫殿的代
称。由于封建皇宫在古代属于禁地,常人不能进入,故称为
“紫禁”。明朝初期同外禁垣一起统称“皇城”,大约明朝中晚
期,与外禁垣区分开来,即宫城叫“紫禁城”,外禁垣为“皇城”。
'''
self.textBrowser.setText(data)
if __name__ == '__main__':
app=QApplication(sys.argv)
w=Mywindows()
w.show()
app.exec()
六、QLineEdit
QLineEdit 是一个用户输入单行文本的控件。可以通过设置文本、获取用户输入及处理文本输入的信号来使用。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextBrowser, QLineEdit # 导入所需的 PyQt5 模块
import sys # 导入 sys 模块以处理命令行参数和退出程序
class Wight(QWidget): # 定义一个名为 Wight 的类,继承自 QWidget
def __init__(self):
super().__init__() # 调用父类的构造函数,初始化父类的属性
self.ui_init() # 调用自定义的 UI 初始化方法
self.setWindowTitle('文本输入') # 设置窗口的标题为 "文本输入"
self.resize(800, 800) # 设置窗口的大小为 800x800 像素
self.move(555, 255) # 设置窗口在屏幕上的位置,坐标为 (555, 255)
def ui_init(self):
# 初始化用户界面
self.line_edit = QLineEdit(self) # 创建一个 QLineEdit 实例,用于文本输入
self.line_edit.setPlaceholderText("Enter something...") # 设置占位符提示文本
# 连接 'returnPressed' 信号到处理方法
self.line_edit.returnPressed.connect(self.print_input) # 当按下 Enter 键时调用 print_input 方法
def print_input(self):
# 获取输入框中的文本并打印到控制台
input_text = self.line_edit.text() # 获取当前输入的文本
print(input_text) # 输出到控制台
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建 QApplication 实例,传递命令行参数
w = Wight() # 创建 Wight 窗口实例
w.show() # 显示窗口
app.exec() # 进入应用程序主循环,等待事件处理
七、QPushButton与QTextBrowser与QLineEdit结合
这是一个按钮、文本和文本输入结合使用的,它将会以注册账号,清除内容为主编写,然后将改账号密码储存到一个txt文本中。其中会添加注册账号时的一些限制
1、清除clear()
self.username_text.clear()
self.pwd_text.clear()
2、隐藏密码
self.pwd_text.setEchoMode(QLineEdit.Password)
3、验证器
int_valider=QtGui.QIntValidator()#整数验证器
# int_valider = QtGui.QRegExpValidator()#正则验证器
# int_valider = QtGui.QDoubleValidator()#浮点数验证器reg_exp=QtCore.QRegExp("^\d{0,11}$")
reg_valider=QtGui.QRegExpValidator(reg_exp,self.username_text)
self.username_text.setValidator(reg_valider)
self.username_text.setValidator(int_valider)
import sys # 导入 sys 模块以处理命令行参数和退出程序
from PyQt5 import QtGui, QtCore # 从 PyQt5 导入图形界面和核心功能模块
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QMessageBox, QLineEdit # 导入所需的 PyQt5 控件
class MyQwindow(QWidget): # 定义一个名为 MyQwindow 的类,继承自 QWidget
def __init__(self):
super().__init__() # 调用父类的构造函数,初始化父类的属性
self.setWindowTitle('标题---注册界面') # 设置窗口的标题
self.resize(550, 240) # 设置窗口的大小为 550x240 像素
self.move(1000, 500) # 设置窗口在屏幕上的位置
self.uit_init() # 调用用户界面初始化方法
self.slot_init() # 调用信号与槽初始化方法
def uit_init(self):
# 初始化用户界面组件
self.username = QLabel('账号:', self) # 创建一个标签用于显示“账号”
self.username.setGeometry(10, 20, 100, 50) # 设置标签的位置和大小
self.username_text = QLineEdit(self) # 创建一个 QLineEdit 用于输入用户名
self.username_text.setGeometry(80, 20, 220, 50) # 设置输入框的位置和大小
self.username_text.setMaxLength(10) # 设置输入的最大长度为 10
int_valider = QtGui.QIntValidator() # 创建整数验证器,限制输入为整数
# int_valider = QtGui.QRegExpValidator() # 这是正则表达式验证器
# int_valider = QtGui.QDoubleValidator() # 这是浮点数验证器
reg_exp = QtCore.QRegExp("^\d{0,11}$") # 定义一个正则表达式,支持 0 到 11 位数字
reg_valider = QtGui.QRegExpValidator(reg_exp, self.username_text) # 创建正则表达式验证器
self.username_text.setValidator(reg_valider) # 为用户名输入框设置正则验证器
self.username_text.setValidator(int_valider) # 为用户名输入框设置整数验证器(此行会覆盖正则验证器)
self.username_btn = QPushButton(self) # 创建一个按钮用于“注册”
self.username_btn.setText('注册') # 设置按钮的文本为“注册”
self.username_btn.setGeometry(350, 20, 150, 50) # 设置按钮的位置和大小
self.pwd = QLabel('密码:', self) # 创建一个标签用于显示“密码”
self.pwd.setGeometry(10, 80, 100, 50) # 设置标签的位置和大小
self.pwd_text = QLineEdit(self) # 创建一个 QLineEdit 用于输入密码
self.pwd_text.setGeometry(80, 80, 220, 50) # 设置输入框的位置和大小
self.pwd_text.setEchoMode(QLineEdit.Password) # 设置输入框为密码模式,输入内容以星号形式显示
self.clear_btn = QPushButton(self) # 创建一个按钮用于“清空”
self.clear_btn.setText('清空') # 设置按钮的文本为“清空”
self.clear_btn.setGeometry(350, 80, 150, 50) # 设置按钮的位置和大小
def slot_init(self):
# 初始化信号与槽的连接
self.username_btn.clicked.connect(self.reg_slot) # 当“注册”按钮被点击时,连接到 reg_slot 方法
self.clear_btn.clicked.connect(self.clear_slot) # 当“清空”按钮被点击时,连接到 clear_slot 方法
def reg_slot(self):
# 注册按钮的槽函数,处理注册逻辑
username = self.username_text.text() # 获取用户名输入框中的文本
pwd = self.pwd_text.text() # 获取密码输入框中的文本
# 验证输入
if username == '' and pwd == '':
QMessageBox.warning(self, '注册', '用户名或密码不能为空') # 提示用户用户名和密码不能为空
elif 0 < len(username) < 10:
QMessageBox.warning(self, '注册', '用户名长度不符合标准') # 提示用户用户名长度不符合标准
elif 0 < len(pwd) < 6:
QMessageBox.warning(self, '注册', '密码长度不符合标准') # 提示用户密码长度不符合标准
else:
# 如果输入有效,将信息写入文件
with open('user.txt', 'a+', encoding='utf-8') as f:
info = f'账号:{username}, 密码:{pwd}\n' # 格式化要写入的信息
f.write(info) # 将信息写入文件
QMessageBox.warning(self, '注册', '恭喜你注册完成') # 提示用户注册成功
def clear_slot(self):
# 清空输入框的槽函数
self.username_text.clear() # 清空用户名输入框
self.pwd_text.clear() # 清空密码输入框
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建 QApplication 实例,传递命令行参数
windows = MyQwindow() # 创建 MyQwindow 窗口实例
windows.show() # 显示窗口
sys.exit(app.exec_()) # 进入应用程序主循环,并确保程序正常退出
简易计算器
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextBrowser, QLabel, QMessageBox, QLineEdit
import sys
class MyQwindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('标题---计算器')
self.resize(550, 280)
self.move(1000, 500)
self.uit_init()
self.slot_init()
def uit_init(self):
self.inp = QLabel('输入:', self)
self.inp.setGeometry(10, 20, 50, 50)
self.inp_text = QLineEdit(self)
self.inp_text.setGeometry(80, 20, 400, 50)
self.inp_btn = QPushButton(self)
self.inp_btn.setText('计算')
self.inp_btn.setGeometry(100, 80, 150, 50)
self.output = QTextBrowser(self)
self.output.setGeometry(80, 160, 400, 100)
self.clear_btn=QPushButton(self)
self.clear_btn.setText('清空')
self.clear_btn.setGeometry(300,80,150,50)
def slot_init(self):
self.inp_btn.clicked.connect(self.show_slot)
self.clear_btn.clicked.connect(self.clear_slot)
def show_slot(self):
data = self.inp_text.text()
self.output.setText(str(eval(data)))
def clear_slot(self):
self.inp_text.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
windows = MyQwindow()
windows.show()
# app.exec()
sys.exit(app.exec_())
八、修改文本中文字大小
self.text2.setFont(QFont('Arial',25))
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QApplication, QWidget, QTextBrowser
import sys
class Wight(QWidget):
def __init__(self):
super().__init__()
self.ui_init()
self.setWindowTitle('文本')
self.resize(800,800)
self.move(555,255)
def ui_init(self):
self.text=QTextBrowser(self)
self.text.setGeometry(0, 0, 600, 100)
self.text.setText('修改文字之前')
self.text2=QTextBrowser(self)
self.text2.setGeometry(0, 100, 600, 400)
self.text2.setFont(QFont('Arial',25))
self.text2.setText('修改文字之后')
if __name__ == '__main__':
app=QApplication(sys.argv)
w=Wight()
w.show()
app.exec()