pyqt样式表语法笔记(中)
pyqt
QSS
python
样式表
一、弹窗
在日常的各种桌面软件的使用中,我们都会碰到弹窗。例如注册,登录的时候,会有相应的信息弹窗,这里就以信息收集弹窗为例进行弹窗的说明。
常见的弹窗的信息种类有文本类、数值类和下拉框选项这几种。主要是通过调用QInputDialog这个类的各种方法实现的。下面分别介绍。
1.文本类
QInputDialog.getText(self,'弹窗标题','弹窗提示信息','控件类型','控件里的提示信息')
('控件类型'一般为QLineEdit.Normal)
具体详见下面的示例。
- @pyqtSignature("")
- def on_input_clicked(self):
- (my_str,status) = QInputDialog.getText(self, '请在此输入信息', '请输入您的姓名', QLineEdit.Normal, '姓名')
- print(my_str)
- print(status)
代码解释:
QInputDialog.getText这一方法会返回一个tuple,第一个元素是用户输入的信息,第二个是返回状态,当用户选择'ok',则返回True,若选择'Cancel',则返回false.
文本类弹窗
效果展示
my_str用于接收用户输入的信息,status则表示返回的布尔值
2.数值类
数值类分为整型(int)和浮点型(double)
整型:QInputDialog.getInteger(self,'弹窗标题','弹窗提示信息','默认值','最小值','最大值')
浮点型: QInputDialog.getDouble(self,'弹窗标题','弹窗提示信息','默认值','最小值','最大值')
QInputDialog.getInteger
解释:
第"1"处,用户可以用键盘上下键进行数值的变动,当然亦可用鼠标
第"2"处,当用户输入比所设定的值大的数时是不会有反应的。也就是说,假如我们设定的最大值是99,当我输入10,再想输入0的时候是不会有反应的。懂?
3.下拉框选项
- @pyqtSignature("")
- def on_list1_clicked(self):
- my_list = QStringList() #这段我不能正常执行,但是视频教程里是这么写的,而且能运行
- my_list.append("apple")
- my_list.append('banana')
- my_list.append('pear')
- my_str, status = QInputDialog.getItem(self, '下拉框', '选择你喜欢的水果', my_list)
- print(my_str,status)
看教程的时候完美运行,一到自己就出问题,反正就是说QStringList这个东西有问题,百度和谷歌了半天也没找到解决办法,后来直接用list就可以了。。。醉了。
- @pyqtSignature("")
- def on_list1_clicked(self):
- my_list = []
- ...
下拉框效果图
二、显示图片
1.显示静态图片
要显示图片,首先需要将图片导入进来,建议是将图片放到你当前文件所在目录。
a.导入图片到资源管理器
导入图片1
导入图片2
第一步新建.qrc文件,保存在当前目录下。
第二步为前缀取名(无限制)
第三步导入图片或其他文件
b.拖拽图片窗口 Graphics View
Graphics View
c.修改样式表
修改样式表
如果只是为了显示图片建议选择"border-image",因为它会自适应窗口。
2.给图片添加事件
难道静态图片就能满足我们的要求吗?为什么不可以通过点击图片实现跳转到网站或其他的功能呢?下面就来做这件事。
首先通过上面一个步骤,我们的目录中已经有一个后缀为**.qrc**的文件,我们需要将它转化为.py文件。
a.用命令行进行转化
- # 将qrc文件转化为.py文件
- # 命令行需要进入到当前目录下
- pyrcc4 my_pic.qrc > test_rc.py
之后我们得到了一个test_rc.py文件,不知道为什么,我执行的时候报错了,错误如下
- Traceback (most recent call last):
- File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6521, in
- qInitResources()
- File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6516, in qInitResources
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
- TypeError: qRegisterResourceData(int, str, str, str): argument 2 has unexpected type 'str'
估计有事编码的问题,omg!
三个参数通过命令行后生成的是str类型,但是函数调用有要求byte类型,这不扯蛋吗?!没办好只好将三个参数转化成bytes类型。不过没关系,bug来了就去解决吧~~在test_rc.py中添加如下代码
- qt_resource_struct = qt_resource_struct.encode('utf-8')
- qt_resource_name = qt_resource_name.encode('utf-8')
- qt_resource_data = qt_resource_data.encode('utf-8')
b. 修改槽函数代码
需要在我们自己定义的类下初始化图片控件的鼠标点击事件,并触发我们自己定义的my_picEvent函数。
新增代码如下
图片鼠标事件
介绍一下webbrowser这个类,我们需要使用import webbrowser来引入这个类,然后当我们点击图片就会通过默认浏览器打开网站了。牛逼!