pyqt图形化表现—3.常用控件

[复制链接]
发表于 2026-1-7 15:17:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前面已经可以大概通过组合构建一个底子的能交互的ui了,接下来就是丰富界面了,一些常用控件走起~
下拉框

界面

起首导入对应库
  1. from PySide6.QtWidgets import  QComboBox, QVBoxLayout
复制代码
QComboBox是下拉框的列表库,QVBoxLayout是垂直布局库,不使用垂直布局没办法表现下拉列表下面就是构建一个下拉框了
  1. cb = QComboBox()  # 创建下拉框
  2. cb.addItems(['a','b','c','d'])  # 添加选项
  3.         
  4. self.setWindowTitle('下拉框')  # 设置窗口标题
  5. ml = QVBoxLayout()  # 创建主布局
  6. ml.addWidget(cb)  # 将下拉框添加到主布局中
  7. self.setLayout(ml)  # 设置主布局
复制代码

界面属性和底子空间一样,可以通过QT Designer找属性设置 
那么页面ui完成,下面就是交互了
信号

常用的有以下两种
  1. cb.currentTextChanged.connect(self.test)
  2. cb.currentIndexChanged.connect(self.test)
复制代码
表现选项变革时,发出信号,触发test函数
不外这两个也是有一些渺小差异的,返回的内容是有所差异的
我们用test函数测试一下
  1.     def test(self,x):
  2.         print('当前选项:', x)
复制代码
currentTextChanged的信号触发时间,会返回选项的内容       
currentIndexChanged的信号触发时,会返回选项在列表的位置【下标】    
固然 由于这个信号是变革时间出发的,也可以使用cb.currentText()读取当前选项选择框

界面

导入库
  1. from PySide6.QtWidgets import QCheckBox, QVBoxLayout
复制代码
QCheckBox就是这个选择框的库啦
界面ui雷同于上面的下拉框,不外由于是选择框的情势,只有是否两种状态,以是只能填入一个元素
  1. cb = QCheckBox('测试一下')  # 创建选择框
  2. self.setWindowTitle('选择框')  # 设置窗口标题
  3. ml = QVBoxLayout()  # 创建主布局
  4. ml.addWidget(cb)  # 将选择框添加到主布局中
  5. self.setLayout(ml)  # 设置主布局
复制代码
创建选择框,添加得到布局中表现

信号

由于只有是否两种状态,信号上就没有那么花里胡哨了 只有一个
  1. cb.stateChanged.connect(self.test)
复制代码
状态改变就触发对应函数相应,返回值是一个整数
测试了一下这个选择框有效果,选择返回效果为2,不选择返回效果为0【大概另有半选的选项】    
  1. cb.stateChanged.connect(lambda :print(cb.isChecked()))
复制代码
也可以使用cb.isChecked()检测是否被选中,返回值为True和False,选中为True     

单选框

界面

导入库
  1. from PySide6.QtWidgets import QRadioButton, QButtonGroup, QVBoxLayout,
复制代码
QRadioButton库是单选框的库;QButtonGroup是选项按钮组的库,后续办理一些逻辑题目;QVBoxLayout是垂直布局库下面就是单选框的ui设置了
  1.         lb1 = QLabel('表头1')  # 添加选项标题
  2.         # 创建选项按钮
  3.         btn1 = QRadioButton('选项1')
  4.         btn2 = QRadioButton('选项2')
  5.         btn3 = QRadioButton('选项3')
  6.         ml = QVBoxLayout()  # 创建主布局
  7.         # 添加到主布局中
  8.         ml.addWidget(lb1)
  9.         ml.addWidget(btn1)
  10.         ml.addWidget(btn2)
  11.         ml.addWidget(btn3)
  12.         self.setLayout(ml)  # 设置主布局
复制代码
由于是单选框那么就出现非此即彼的关系如下图,我只能在三个选项中选择一个  

但只是如同上图一样一个表头三个选项那还好,如果两个表头,三个表头,我必要在多个题目中选择答案,那么这个非此即彼的关系就会让我们的选项总是只存在一个。关于这个逻辑题目就必要QButtonGroup来办理了,把特定的按钮举行组合,在这个组合内存在非此即彼的关系,与组合外无关。
  1.         self.group1 = QButtonGroup(self)  # 创建单选框组
  2.         lb1 = QLabel('表头1')  # 添加选项标题
  3.         # 创建选项按钮
  4.         btn1 = QRadioButton('选项1')
  5.         btn2 = QRadioButton('选项2')
  6.         btn3 = QRadioButton('选项3')
  7.   
  8.         # 添加选项到单选框组中
  9.         self.group1.addButton(btn1)
  10.         self.group1.addButton(btn2)
  11.         self.group1.addButton(btn3)
  12.         # 创建布局
  13.         h1 = QVBoxLayout()  # 创建布局
  14.         # 添加到布局中
  15.         h1.addWidget(lb1)
  16.         h1.addWidget(btn1)
  17.         h1.addWidget(btn2)
  18.         h1.addWidget(btn3)
  19.         ml = QVBoxLayout()  # 创建主布局
  20.         ml.addLayout(h1)  # 布局添加到主布局中
  21.         self.setLayout(ml)  # 设置主布局
复制代码
View Code通过self.组合名 = QButtonGroup(self)创建按钮组合,self.组合名.addButton(按钮名)把按钮添加到组合内,实现组合内的逻辑关系
固然界面是划一的,但多个表头的逻辑关系已经发生了区分
checkedButton 函数查察按钮是否被选中,偶尔间也是有用的
信号

由于上述已经将对应按钮举行了分组,那么我们可以直接对组举行信号处理处罚
  1. self.group1.buttonClicked.connect(self.test)
复制代码
self.组合名.buttonClicked.connect(相应函数) 作用是该组合按钮被点击,触发对应函数相应,返回值是按钮名称地点,必要转换一下得到按钮闻名称    
  1.     def test(self,x):
  2.         print(x.text())
复制代码
 文本框

文本框一样寻常有两种情势一种是富文本框(QTextEdit),雷同于ppt那种文本框可以插入图片,表格啊以致HTML格式;另一种是纯文本框(QPlainTextEdit),只应用于纯文本。两者各有优劣,前者文本框内容表现更丰富,但相对的占用的资源就多;后者纯文本,对于大量文本处理处罚相应更快
界面

导入库
  1. from PySide6.QtWidgets import QTextEdit, QPlainTextEdit
复制代码
已经先容了一个是富文本框,一个是纯文本框
下面就是设置和属性部门了,作为对比两个文本框同时表现,上面为富文本框,下面为纯文本框
  1.         text1 = QTextEdit()  # 创建文本框
  2.         text1.setHtml('<h1>标题</h1><b>加粗</b><i>斜体</i><u>下划线</u>')
  3.         #text1.setMarkdown('# 标题\n**加粗** *斜体* _下划线_')
  4.         #text1.setText('测试一下')
  5.         #text1.setPlainText('测试一下')
  6.         text2 = QPlainTextEdit()  # 创建文本框
  7.         text2.setPlainText('<h1>标题</h1><b>加粗</b><i>斜体</i><u>下划线</u>')
  8.         ml = QVBoxLayout()  # 创建主布局
  9.         ml.addWidget(text1)  # 添加到主布局中
  10.         ml.addWidget(text2)
  11.         self.setLayout(ml)  # 设置主布局
复制代码
文本框

通过对比就可以发现两者的区别,同样的在属性上富文本框的属性会更多一些,超链接啊,图片啊等等,可以在文档中查到
.appendPlainText('xx')  在文本框末端添加文本 ‘xx’
.clear() 扫除 等等等等信号

常用的就一个textChanged 文本变革时触发相应,无返回值
滑条

界面

导入库
  1. from PySide6.QtWidgets import QSlider
  2. from PySide6.QtCore import Qt #枚举类需要使用
复制代码
下面就是设置参数和属性了
  1. sd = QSlider(Qt.Orientation.Horizontal)  # 创建水平滑条
  2. sd.setTickPosition(QSlider.TickPosition.TicksRight)  # 设置滑条刻度位置
  3. sd.setTickInterval(10)  # 设置滑条刻度间隔
  4. sd.setMinimum(0)  # 设置滑条的最小值
  5. sd.setMaximum(100)  # 设置滑条的最大值
  6. # sd.setRange(0, 100)  # 设置滑条的范围
  7. sd.setSingleStep(5)  # 设置滑条的单步值
  8. sd.setValue(50)  # 设置滑条的初始值
复制代码
设置完成后添加到布局内表现

 QSlider  如果不设置那么效果为垂直滑条
setTickPosition  可以设置刻度的位置参数如下  参数:   NoTicks      ——>无刻度      TicksBothSides  ——>两侧刻度      TicksAbove      ——>上侧刻度      TicksBelow      ——>下侧刻度      TicksLeft     ——>左侧刻度      TicksRight        ——>右侧刻度信号
  1. sd.valueChanged.connect(self.test)  # 连接滑条的valueChanged信号到槽函数
复制代码
数值发生改变时间,对应函数相应
  1.     def test(self):
  2.         widget = self.sender()  # 获取发送信号的对象
  3.         print(f'滑条的值已改变:{widget.value()}')
复制代码
留意返回值是对应的刻度数值

self.sender() 用于获取该信号是由谁人变量发送的,方便大型项目多个同范例变量的逻辑处理处罚 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表