• 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.

    文本类弹窗

    文本类弹窗

    效果展示

    效果展示

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


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

    QInputDialog.getInteger

    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. ... 

    下拉框效果图

    下拉框效果图

    二、显示图片

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

    导入图片1

    导入图片1

    导入图片2

    导入图片2

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

    b.拖拽图片窗口 Graphics View

    Graphics View

    Graphics View

    c.修改样式表

    修改样式表

    修改样式表

    如果只是为了显示图片建议选择"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:Users14356Desktop est_pyqt est_rc.py", line 6521, in <module> 
    3. qInitResources() 
    4. File "C:Users14356Desktop est_pyqt est_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函数。
    新增代码如下

    图片鼠标事件

    图片鼠标事件

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

    0

  • 相关阅读:
    geoserver源码maven编译相关问题
    openlayers2地图控件扩展:要素删除DeleteFeature
    openlayers2地图控件扩展:图例控件LegendControl
    [小游戏资源] 微信小游戏开发资源目录
    【转】利用 three.js 开发微信小游戏的尝试
    微信小游戏开发之四:使用three.js引擎
    【转】微信小游戏开发源码_教程_工具_资源最新集合
    【转】微信小游戏学习
    微信小游戏开发Canvas资源汇总
    【转】微信小游戏开发总结
  • 原文地址:https://www.cnblogs.com/marsggbo/p/6622905.html
Copyright © 2020-2023  润新知