pyqt样式表语法笔记(中)

pyqt样式表语法笔记(中)

pyqt

QSS

python

样式表

一、弹窗

在日常的各种桌面软件的使用中,我们都会碰到弹窗。例如注册,登录的时候,会有相应的信息弹窗,这里就以信息收集弹窗为例进行弹窗的说明。

常见的弹窗的信息种类有文本类、数值类和下拉框选项这几种。主要是通过调用QInputDialog这个类的各种方法实现的。下面分别介绍。


  • 1.文本类
    QInputDialog.getText(self,'弹窗标题','弹窗提示信息','控件类型','控件里的提示信息')
    ('控件类型'一般为QLineEdit.Normal)
    具体详见下面的示例。

  1. @pyqtSignature("") 
  2. def on_input_clicked(self): 
  3. (my_str,status) = QInputDialog.getText(self, '请在此输入信息', '请输入您的姓名', QLineEdit.Normal, '姓名') 
  4. print(my_str) 
  5. print(status) 

代码解释:
QInputDialog.getText这一方法会返回一个tuple,第一个元素是用户输入的信息,第二个是返回状态,当用户选择'ok',则返回True,若选择'Cancel',则返回false.


pyqt样式表语法笔记(中)


文本类弹窗



pyqt样式表语法笔记(中)


效果展示


my_str用于接收用户输入的信息,status则表示返回的布尔值



  • 2.数值类
    数值类分为整型(int)和浮点型(double)
    整型:QInputDialog.getInteger(self,'弹窗标题','弹窗提示信息','默认值','最小值','最大值')
    浮点型: QInputDialog.getDouble(self,'弹窗标题','弹窗提示信息','默认值','最小值','最大值')


pyqt样式表语法笔记(中)


QInputDialog.getInteger


解释:
第"1"处,用户可以用键盘上下键进行数值的变动,当然亦可用鼠标
第"2"处,当用户输入比所设定的值大的数时是不会有反应的。也就是说,假如我们设定的最大值是99,当我输入10,再想输入0的时候是不会有反应的。懂?



  • 3.下拉框选项

  1. @pyqtSignature("") 
  2. def on_list1_clicked(self): 
  3. my_list = QStringList() #这段我不能正常执行,但是视频教程里是这么写的,而且能运行 
  4. my_list.append("apple") 
  5. my_list.append('banana') 
  6. my_list.append('pear') 
  7. my_str, status = QInputDialog.getItem(self, '下拉框', '选择你喜欢的水果', my_list) 
  8. print(my_str,status) 

看教程的时候完美运行,一到自己就出问题,反正就是说QStringList这个东西有问题,百度和谷歌了半天也没找到解决办法,后来直接用list就可以了。。。醉了。

  1. @pyqtSignature("") 
  2. def on_list1_clicked(self): 
  3. my_list = [] 
  4. ... 


pyqt样式表语法笔记(中)


下拉框效果图


二、显示图片

  • 1.显示静态图片
    要显示图片,首先需要将图片导入进来,建议是将图片放到你当前文件所在目录。
    a.导入图片到资源管理器


pyqt样式表语法笔记(中)


导入图片1



pyqt样式表语法笔记(中)


导入图片2


第一步新建.qrc文件,保存在当前目录下。
第二步为前缀取名(无限制)
第三步导入图片或其他文件


b.拖拽图片窗口 Graphics View


pyqt样式表语法笔记(中)


Graphics View


c.修改样式表


pyqt样式表语法笔记(中)


修改样式表


如果只是为了显示图片建议选择"border-image",因为它会自适应窗口。


  • 2.给图片添加事件

难道静态图片就能满足我们的要求吗?为什么不可以通过点击图片实现跳转到网站或其他的功能呢?下面就来做这件事。

首先通过上面一个步骤,我们的目录中已经有一个后缀为**.qrc**的文件,我们需要将它转化为.py文件。

a.用命令行进行转化

  1. # 将qrc文件转化为.py文件 
  2. # 命令行需要进入到当前目录下 
  3. pyrcc4 my_pic.qrc > test_rc.py 

之后我们得到了一个test_rc.py文件,不知道为什么,我执行的时候报错了,错误如下

  1. Traceback (most recent call last): 
  2. File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6521, in
  3. qInitResources() 
  4. File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6516, in qInitResources 
  5. QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 
  6. TypeError: qRegisterResourceData(int, str, str, str): argument 2 has unexpected type 'str' 

估计有事编码的问题,omg!
三个参数通过命令行后生成的是str类型,但是函数调用有要求byte类型,这不扯蛋吗?!没办好只好将三个参数转化成bytes类型。不过没关系,bug来了就去解决吧~~在test_rc.py中添加如下代码

  1. qt_resource_struct = qt_resource_struct.encode('utf-8') 
  2. qt_resource_name = qt_resource_name.encode('utf-8') 
  3. qt_resource_data = qt_resource_data.encode('utf-8') 

b. 修改槽函数代码
需要在我们自己定义的类下初始化图片控件的鼠标点击事件,并触发我们自己定义的my_picEvent函数。
新增代码如下


pyqt样式表语法笔记(中)


图片鼠标事件


介绍一下webbrowser这个类,我们需要使用import webbrowser来引入这个类,然后当我们点击图片就会通过默认浏览器打开网站了。牛逼!

上一篇:js中的toString方法


下一篇:pyqt combobox