python pyqt5学习笔记 2020.9.24(鼠标悬浮提示,改变鼠标背景,使用外部变量,滑动条的使用,使用QListWidget切换图片)

25 篇文章 2 订阅

鼠标指到按钮上提示

setToolTip()
例如: 定义了一个按钮 red_pen
使用时:

self.red_pen.setToolTip("红色")

结果:
在这里插入图片描述

点击按钮,改变鼠标光标的样式,添加背景

#通过点击按钮,改变鼠标光标在lflabel1控件中的背景
    def set_red_pen(self):
        #改变光标背景
        pic=QtGui.QPixmap("pic/1.jpg")     #读取图片
        pic = pic.scaled(25,25)          #改变图片大小
        self.lflabel1.setCursor(QtGui.QCursor(pic))

运行结果:
(鼠标一移入左边的框控件内,就会改变样式)
在这里插入图片描述

使用外部变量

第一种:
global全局变量:
定义global对象,就可以外部引用了:

    def select_dir(self):
        global label_path
        label_path = Qt.QFileDialog.getExistingDirectory()

第二种:
初始化时就定义的,要声明它归属的对象self,如:
(这个变量归属于当前self所指的类,并不是完全的全局变量)

#程序初始化完成以后就可以使用
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self,parent=None):        
        super(MainWindow,self).__init__(parent)        
        self.ui = Ui()        
        self.ui.setupUi(self)   
        self.radius = 10   #半径
        self.pen_clor = "red"   #画笔颜色
    def change():
        self.pen_clor = "blue"

QSlider 滑动条的使用

#滑动条
self.radius_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal,self.penBox)    #前一个参数是使它水平放置(默认是竖直的),后一个是父控件
self.radius_slider.setGeometry(QtCore.QRect(5,75,280,15))       
self.radius_slider.valueChanged.connect(Form.radius_Changed)    #滑块值变动时启动的函数
self.radius_slider.setMinimum(0)#最小值
self.radius_slider.setMaximum(10)#最大值
self.radius_slider.setSingleStep(1)#步长
self.radius_slider.setTickInterval(1)#设置刻度间隔
self.radius_slider.setTickPosition(QtWidgets.QSlider.TicksBelow)      #设置刻度

值变化时启用的函数:

def radius_Changed(self):
    self.radius = self.ui.radius_slider.value()  #这里我使用全局变量来接收滑块的值
    print(self.radius)    

在这里插入图片描述
使用时,在相应位置点击并不能跳到该值,而是反复在最大最小值之间来回切换,需要重写函数。好在滚轮也可以控制它,所以就不作更改了。

label 图窗显示图片

#label为用来显示的控件,file_path为图片路径,scaled是改变图片宽高尺寸
self.label.setPixmap(QtGui.QPixmap(file_path).scaled(self.label.width(),self.label.height()))

在这里插入图片描述

类似labelme,使用QListWidget将图片文件形成列表排列

列出我写的选择文件夹功能,改写一下就好,为了方便传递,接收的变量我全都定义的全局变量

#选择文件夹(选择文件夹以后,图片会list列在文件显示框中)
    def select_dir(self):
        self.label_path = Qt.QFileDialog.getExistingDirectory()  
        print(self.label_path)
        if self.label_path is not None or self.label_path != "":
            self.files = os.listdir(self.label_path)
            self.files.sort()
            self.curr_pic = self.label_path+"/"+self.files[0]
            self.ui.lflabel1.setPixmap(QtGui.QPixmap(self.curr_pic).scaled(self.ui.lflabel1.width(),self.ui.lflabel1.height()))
            
            self.ui.file_list.clear()   #先清空上一次的记录
            for i in range(0,len(self.files)):
                self.ui.file_list.insertItem(i,self.label_path+"/"+self.files[i]) 

运行结果:
(选择完文件夹以后,首先显示了第一张图片)
在这里插入图片描述

点击QListWidget中的文件,来切换label的图片显示

使用QListWidget自带的行变换信号槽建立连接,它会自带一个变量参数i

self.file_list.currentRowChanged.connect(Form.pic_display)

然后来写pic_display的功能:

def pic_display(self,i):          #list切换图片
        self.curr_pic = self.label_path+"/"+self.files[i]
        self.ui.lflabel1.setPixmap(QtGui.QPixmap(self.curr_pic).scaled(self.ui.lflabel1.width(),self.ui.lflabel1.height()))

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加上上面的操作,是不是就跟labelme很像了呢,现在就差标注功能了,后面继续更新。

忘了加个橡皮擦,先作为白色画笔在程序中加了进去。
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值