鼠标指到按钮上提示

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很像了呢,现在就差标注功能了,后面继续更新。

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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐