PyQt5 GUI编程(组件使用)
一.简介
PyQt5 是一个用于创建图形用户界面(GUI)应用程序的 Python 绑定,它基于 Qt 库。PyQt5 提供了大量的组件(也称为控件或部件),用于构建复杂的用户界面。以下是一些常用的 PyQt5 组件
二.组件用法
1.数字组件(QLCDNumber)
class FileChooserApp(QWidget):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
lcd = QLCDNumber() # 创建一个数字控件
sld = QSlider(Qt.Horizontal) # 创建一个进度条控件
vbox = QVBoxLayout() # 创建一个垂直布局
vbox.addWidget(lcd)
# vbox.addStretch(1)
vbox.addWidget(sld) self.setLayout(vbox) # 添加到布局器中
sld.valueChanged.connect(lcd.display) # 将数字和进度条联动绑定在一起 self.setWindowTitle('文件选择器')
self.setGeometry(300, 300, 500, 500)
上述中创建了一个数字组件和一个进度条组件,两者绑定在一起,通过滑动进度条来改变数字。
2.快捷键(Key_Space)
def keyPressEvent(self, e): # 重写keyPressEvent
if e.key() == Qt.Key_Space: # 如果按下空格键退出程序,Qt.Key_Escape也可写成具体的数字32
print("事件")
self.close()
除了Qt.Key_Space外还有上千种快捷操作,可以在封装好的Qt.py下查看,这里列举几个最常用的。
Qt.Key_Return 或 Qt.Key_Enter | 代表回车键 |
Qt.Key_Space | 代表空格键 |
Qt.Key_A 到 Qt.Key_Z | 代表 A 到 Z 的字母键 |
Qt.Key_0 到 Qt.Key_9 | 代表 0 到 9 的数字键 |
Qt.Key_F1 到 Qt.Key_F12 | 代表功能键 F1 到 F12 |
Qt.Key_Tab | 代表 Tab 键 |
Qt.Key_Backspace | 代表退格键(Backspace) |
Qt.Key_Delete | 代表删除键 |
Qt.Key_Home和 Qt.Key_End | 代表 Home 和 End 键 |
Qt.Key_Left, Qt.Key_Right, Qt.Key_Up, Qt.Key_Down | 代表方向键 |
Qt.Key_Plus 和 Qt.Key_Minus | 代表加号(+)和减号(-)键(注意,这些与数字键盘上的加减号不同) |
Qt.Key_PageUp 和 Qt.Key_PageDown | 代表翻页键 |
3.鼠标位置跟踪


class FileChooserApp(QWidget):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
x = 0
y = 0 text = "x: {0},y: {1}".format(x, y) # 设置默认值0,0
self.label = QLabel(text, self) # 坐标添加到laber组件里
self.label.resize(150, 20) # 设置组件长宽
self.setMouseTracking(True) # x,y显示在laber组件里
self.setGeometry(300, 300, 350, 200)
self.setWindowTitle('鼠标坐标') # 鼠标位置跟踪
def mouseMoveEvent(self, e): # e表示当前鼠标对象,x(),y()得到鼠标x,y坐标
x = e.x()
y = e.y()
text = "x: {0},y: {1}".format(x, y)
self.label.setText(text) if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
注释写的很清楚了,这里直接演示效果。鼠标在界面内移动,坐标实时显示,
4.事件发送,获取触发事件的信息


class FileChooserApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() # 事件发送,获取某个事件行为
def initUI(self):
btn1 = QPushButton("Button 1", self)
btn1.move(30, 50) btn2 = QPushButton("Button 2", self)
btn2.move(150, 50) btn1.clicked.connect(self.click)
btn2.clicked.connect(self.click) self.statusBar() # 底部状态栏 self.setGeometry(500, 500, 290, 150)
self.setWindowTitle('button') def click(self):
sender = self.sender() # 用于接收信号
self.statusBar().showMessage(sender.text()) # 状态栏设置点击按钮的内容 if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
当我们点击两个按钮中任意一个时,sender()方法接收信号的来源于,来判断是点击哪个按钮触发的信号。
5.可输入内容弹框(QInputDialog)


class FileChooserApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() # 二级输入弹框
def initUI(self):
self.btn = QPushButton('Dialog', self)
self.btn.move(20, 20)
self.btn.clicked.connect(self.showDialog) self.le = QLineEdit(self)
self.le.move(130, 22) self.setGeometry(500, 500, 290, 150)
self.setWindowTitle('Input dialog') def showDialog(self):
"""
QInputDialog创建弹框,第一个参数表示弹框title,第二个参数表示输入框说明
text为输入后返回的内容
ok:bool类型,ok为true,false为cancel
""" text, ok = QInputDialog.getText(self, 'Input Dialog',
'输入你的名字') if ok:
self.le.setText(str(text)) if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
点击按钮时触发QInputDialog弹框,输入内容点击ok时,将输入的内容赋予QLineEdit中。
6.颜色组件(QColor)


class FileChooserApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() # 选择颜色
def initUI(self):
col = QColor(0, 0, 0) # 初始化QFrame颜色 self.btn = QPushButton('Dialog', self)
self.btn.move(20, 20) self.btn.clicked.connect(self.showDialog) self.frm = QFrame(self)
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name()) # 设置QFrame样式,col.name() 返回的是一个有效的颜色值
self.frm.setGeometry(130, 22, 100, 100) self.setGeometry(300, 300, 250, 180)
self.setWindowTitle('Color dialog') def showDialog(self):
col = QColorDialog.getColor() # 弹出颜色选择框
if col.isValid(): # true设置颜色,false返回
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name()) if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
点击按钮时弹出颜色选择框(QColorDialog.getColor()),选择颜色后isValid()判断是否已选择,或者取消选择。
7.文字字体类型组件


class FileChooserApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
btn = QPushButton('选择字体', self)
btn.setSizePolicy(QSizePolicy.Fixed,
QSizePolicy.Fixed) btn.move(20, 20) btn.clicked.connect(self.showDialog)
self.ql = QLineEdit(self)
self.ql.move(150,20) self.setGeometry(500, 500, 250, 180)
self.setWindowTitle('字体') def showDialog(self):
font, ok = QFontDialog.getFont() # 打开文本选择框,font为返回的格式,ok为true
if ok:
self.ql.setFont(font) if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
点击按钮时弹出字体类型选择框(QFontDialog.getFont()),选择字体后返回一个字体类型和一个bool值,判断是否已选择,或者取消选择。
8.复选框(QCheckBox)


# 复选框
def initUI(self):
self.laber = QLabel(self)
self.laber.setText("初始值")
self.laber.move(150, 20)
cb = QCheckBox('复选框', self) # 创建一个复选框,
cb.move(20, 20)
cb.toggle()
"""
切换复选框的选中状态。如果复选框当前是未选中的,它将被选中;如果它是已选中的,它将被取消选中。
默认情况下,新创建的复选框是未选中的。因此,调用toggle()将使其变为选中状态
"""
cb.stateChanged.connect(self.changeTitle) # stateChanged选择状态发送变化时 self.setGeometry(500, 500, 250, 150)
self.setWindowTitle('QCheckBox') def changeTitle(self, state): if state == Qt.Checked: # 当选中时,重置文本
self.laber.setText("已选中")
else:
self.laber.setText("未选中") # 当未选中时,重置文本
效果如下
9.按钮状态切换


def initUI(self):
self.col = QColor(0, 0, 0) # 初始值为黑色
redb = QPushButton('Red', self)
redb.setCheckable(True)
redb.move(10, 10)
redb.clicked[bool].connect(self.setColor) # 返回bool类型 greenb = QPushButton('greenb', self)
greenb.setCheckable(True) # 设置按钮为可选择按钮
greenb.move(100, 10)
greenb.clicked[bool].connect(self.setColor) # 返回bool类型 blueb = QPushButton('blueb', self)
blueb.setCheckable(True)
blueb.move(200, 10)
blueb.clicked[bool].connect(self.setColor) # 返回bool类型 self.frame = QFrame(self)
self.frame.move(100, 100)
self.frame.setStyleSheet("QFrame { background-color: %s }"
% self.col.name()) # 设置QFrame样式,col.name() 返回的是一个有效的颜色值 def setColor(self, status):
sender = self.sender() # 获取信号源
if status:
val = 255 # 颜色深度
else:
val = 0 #
if sender.text() == "Red":
self.col.setRed(val) # 设置color为红色
elif sender.text() == "greenb":
self.col.setGreen(val) # 设置颜色,数字表示颜色深度
elif sender.text() == "blueb":
self.col.setBlue(val)
self.frame.setStyleSheet("QWidget { background-color: %s }"
% self.col.name()) # 设置QFrame样式,col.name() 返回的是一个有效的颜色值
创建了三个按钮,分别是红,绿,蓝,设置按钮为可选择按钮。当点击按钮时,发送信号给槽,返回一个bool值,setcolor接收这个bool值,判断为true时,设置颜色深度,并通过sender()来获取是哪个按钮被点击了,从而设置QFrame的值。
上面实例中有个小缺陷,在选中一个按钮是,应当判断其它按钮有没有被选中,若选中需取消选择,这样不会出现颜色偏差。
10.滑块组件


# 滑块
def initUI(self):
sld_h = QSlider(Qt.Horizontal, self) # 设置水平滑块
sld_h.move(0,0)
sld_v = QSlider(Qt.Vertical, self) # 设置垂直滑块
sld_v.move(0,100)
sld_h.setFocusPolicy(Qt.NoFocus) # 设置水平滑块键盘不可滑动
# 设置滑块的范围
sld_h.setRange(0, 100)
# 设置滑块的初始值
sld_h.setValue(0)
sld_h.setValue(50)
sld_h.valueChanged[int].connect(self.slider) # 返回一个数字 self.label = QLabel(self)
self.label.setText("初始值")
# self.label.setPixmap(QPixmap('mute.png')) # 可将label控件添加图片,可以制作音量调节
self.label.move(200,0) self.setGeometry(500,500,500,500) def slider(self, i): # 接收数字时判断
if i == 0:
self.label.setText("最小值")
elif 0 < i < 50:
self.label.setText("中间值")
else:
self.label.setText("最大值")
11.日志


# 日历
def initUI(self):
cal = QCalendarWidget(self) # 创建一个日历控件
cal.setGridVisible(False) # 设置控件网格是否可见,True可见
cal.clicked[QDate].connect(self.showDate) # 返回一个基于pyqt5的日期格式
self.lbl = QLabel(self)
self.lbl.move(0, 350)
date = cal.selectedDate() # 获取当前时间
print(date)
self.lbl.setText(date.toString()) # 设置默认展示当前时间
self.setGeometry(500, 500, 500, 500) def showDate(self, data):
self.lbl.setText(data.toString())
12.下拉框


import sys from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QComboBox class Example(QWidget): def __init__(self):
super().__init__() self.initUI() # 下拉框
def initUI(self):
self.lbl = QLabel("Ubuntu", self) combo = QComboBox(self) # 创建一个下拉框控件
combo.addItem("红")
combo.addItem("黄")
combo.addItem("绿")
combo.addItem("青")
combo.addItem("蓝") combo.move(50, 50)
self.lbl.move(50, 150) combo.activated[str].connect(self.onActivated) # 当下拉框索引发送变化时,返回一个选择值 self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QComboBox') def onActivated(self, st):
self.lbl.setText(st)
self.lbl.adjustSize() # 自定义适配长度 if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
PyQt5 GUI编程(组件使用)的更多相关文章
- 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )
GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!
[题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...
- Python gui编程pyQt5安装步骤t
Python gui编程pyQt5安装步骤 pip install PyQt5 Pip3 install PyQt5 https://riverbankco ...
- Python gui编程pyQt5安装步骤
Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic $FileName$ -o $FileNameWit ...
- Java GUI编程4---标签组件JLabel
Java GUI编程4---标签组件JLabel 2018年06月11日 22:06:58 蓝蓝223 阅读数 12103更多 个人分类: Java书籍摘抄 所属专栏: Java Swing图形界面 ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(35篇PyQT和200多篇Python)
[题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...
- 1.JAVA之GUI编程概述
下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式: ...
- 2.JAVA之GUI编程布局
布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...
- 3.JAVA之GUI编程Frame窗口
创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...
- 4.JAVA之GUI编程事件监听机制
事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...
随机推荐
- java内存模型(jmm)概念初探
1.和java内存结构的区别: 很多人会把jmm和Java内存结构搞混,网上搜到的一些文章也是如此,java内存结构就是我们常说的堆,栈,方法区,程序计数器..., 当jvm虚拟机启动的时候,会初始化 ...
- 并发编程面试必备之ConcurrentHashMap源码解析
ConcurrentHashMap在我的面试生涯中,10次有8次是会被问到的,记得刚毕业那会,被问到ConcurrentHashMap源码的无助与苦涩,无奈只能网上找了一些教程,背一背,才算是蒙混过关 ...
- 鸿蒙HarmonyOS实战-ArkUI组件(Video)
一.Video 视频组件是用于应用程序中嵌入视频的一种方法.它可以让用户在网站上观看视频并与其进行交互.通常,视频组件将一个视频文件嵌入应用程序中,并提供一组控件,这些控件允许用户播放.暂停.跳过.音 ...
- 二、Unity调用Xcode封装方法
1.开始封装Unity调用接口 我们在Xcode中 写的接口需要在extern "C"中(加上extern "C"后,会指示编译器这部分代码按C语言的进行编译) ...
- HDC2021技术分论坛:HarmonyOS本地模拟器重磅来袭!
作者:longjiangyun,模拟器开发工程师 HarmonyOS模拟器是应用开发者使用IDE进行代码开发.调试.测试等活动中必不可少的工具,它分为本地模拟器和远程模拟器,其中远程模拟器又分为单设备 ...
- SilentEye qsnctf wp
题目附件(注:文件名为Luminous.jpg) 根据题目提示,使用SilentEye工具 将图片使用SilentEye打开 使用左下角的Decode解密功能 猜测密码为文件名,输入并开始解密 将被加 ...
- 抓包整理————tcpdump过滤器[七]
前言 简单介绍一下tcpdump 正文 这里可以tcpdump -D 可以列出各个网卡的信息: 默认抓取eth0,也就是第一个: 还有下面的选项: -D 举例所有的网卡设备 -i 选择网卡设备 -c ...
- LeetCode:999. 车的可用捕获量
999. 车的可用捕获量 在一个 8 x 8 的棋盘上,有一个白色车(rook).也可能有空方块,白色的象(bishop)和黑色的卒(pawn).它们分别以字符 "R"," ...
- 配置服务器SSH PAM防止暴力破解
正常机器如果开启ssh可能会被暴力破解用户密码,可以配置ssh的pam限制登录失败时可以锁定用户一段时间,就算密码输入正确也无法登录,等恢复之后才可以再次进入,对于不同的发行版配置可能略有不同,对于r ...
- Serverless 架构下的 AI 应用开发:入门、实战与性能优化
简介: 本章通过对 Serverless 架构概念的探索,对 Serverless 架构的优势与价值.挑战与困境进行分析,以及 Serverless 架构应用场景的分享,为读者介绍 Serverles ...