一、大小
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 sysif __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.5height = 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, QtWidgetsclass 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.translateForm.setWindowTitle(_translate("Form", "Form"))self.show_btn.setText(_translate("Form", "故宫按钮"))
from untitled import Ui_Form
import sys
from PyQt5.QtWidgets import QApplication,QWidgetclass 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 的类,继承自 QWidgetdef __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 sysclass 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()