鼠标指到按钮上提示
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很像了呢,现在就差标注功能了,后面继续更新。
忘了加个橡皮擦,先作为白色画笔在程序中加了进去。