前几天开始的pygame音乐播放器Doco,做的差不多了,上午做到了歌词显示和搜索页面.遇到bug,即通过resize改变ui大小时ListWidget显示异常


#目的:

  增加一部分窗口用来显示歌词和搜索页面.也就是在原来播放器的基础上通过resize增加窗口宽度,然后增加相应的内容.

#test

  由于Doco代码过于臃肿,笔者来一个test来描述上午遇到的问题吧.

首先,欲改变ui宽度,则想到resize

Test.resize(852, 714)
#设置高和宽
Test.setFixedSize(852, 714)
#设置调整宽和高

#测试代码:

  来个test的完整代码:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Test.ui'
#
# Created: Sun Apr 2 21:46:12 2017
# by: PyQt5 UI code generator 5.2.1
#
# WARNING! All changes made in this file will be lost! #code by dearvee
import sys
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Test(object):
def setupUi(self, Test):
Test.setObjectName("Test")
Test.resize(852, 714)
Test.setFixedSize(852, 714)
self.lineEdit = QtWidgets.QLineEdit(Test)
self.lineEdit.setGeometry(QtCore.QRect(150, 20, 200, 41))
self.lineEdit.setObjectName("lineEdit")
self.listWidget = QtWidgets.QListWidget(Test)
self.listWidget.setGeometry(QtCore.QRect(0, 140, 420, 421))
self.listWidget.setObjectName("listWidget")
self.toolButton = QtWidgets.QToolButton(Test,clicked=lambda:self._resize(Test))
self.toolButton.setGeometry(QtCore.QRect(0, 20, 41, 41))
self.toolButton.setObjectName("toolButton") self.retranslateUi(Test)
QtCore.QMetaObject.connectSlotsByName(Test) def retranslateUi(self, Test):
_translate = QtCore.QCoreApplication.translate
Test.setWindowTitle(_translate("Test", "Test"))
self.toolButton.setText(_translate("Test", "<")) def _resize(self,Test):
Test.resize(420, 714)#420, 714
Test.setFixedSize(420, 714) if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Test()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())

现在当点击<按钮,则Test的宽度减少,功能实现.

#运行效果:

#发现bug:

  点击<按钮后宽度变小,但listwidget颜色变成了黑色,当鼠标移入时,恢复正常,这当然不是想要的效果,笔者暂时还不知道造成这种情况的原因所在.

#debug:

  网上粗略的找了一下,没有找到相同问题的解决办法.尝试在<按钮上,增加刷新listwidget事件,成功解决问题.

self.listWidget.clear()#清空list

当然,这里笔者用的listwidget为空表,直接clear即可,如果里面有item,亦刷新即可.

下面debug后完整代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Test.ui'
#
# Created: Sun Apr 2 21:46:12 2017
# by: PyQt5 UI code generator 5.2.1
#
# WARNING! All changes made in this file will be lost! import sys
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Test(object):
def setupUi(self, Test):
Test.setObjectName("Test")
Test.resize(852, 714)
Test.setFixedSize(852, 714)
self.lineEdit = QtWidgets.QLineEdit(Test)
self.lineEdit.setGeometry(QtCore.QRect(150, 20, 200, 41))
self.lineEdit.setObjectName("lineEdit")
self.listWidget = QtWidgets.QListWidget(Test)
self.listWidget.setGeometry(QtCore.QRect(0, 140, 420, 421))
self.listWidget.setObjectName("listWidget")
self.toolButton = QtWidgets.QToolButton(Test,clicked=lambda:self._resize(Test))
self.toolButton.setGeometry(QtCore.QRect(0, 20, 41, 41))
self.toolButton.setObjectName("toolButton") self.retranslateUi(Test)
QtCore.QMetaObject.connectSlotsByName(Test) def retranslateUi(self, Test):
_translate = QtCore.QCoreApplication.translate
Test.setWindowTitle(_translate("Test", "Test"))
self.toolButton.setText(_translate("Test", "<")) def _resize(self,Test):
Test.resize(420, 714)#420, 714
Test.setFixedSize(420, 714)
self.listWidget.clear()#清空list if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Test()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())

运行此程序,成功解决了问题.

至此,关于上午遇到的 listwidget以resize改变窗体宽度时显示异常问题的解决办法叙述完毕.

来一个音乐播放器Doco的截图,暂时还没有找到合适的素材,有点丑Q_Q:

PyQt通过resize改变窗体大小时ListWidget显示异常的更多相关文章

  1. 火狐浏览器不支持location.reload()(以改变页面大小时重新刷新页面为例)

    背景:当页面大小改变时需要重新刷新页面,以适应相应的尺寸 解决方法: var url = window.location.href; var parm = parseInt(Math.random() ...

  2. openGL如何在改变窗口大小时,使自己的图形不被拉伸

    这里要注意两个概念:视口和视景体,当视口的纵横比和视景体的纵横比相同的时候,改变窗口大小,图像才不会变形: 视景体是指成像景物所在空间的集合.它是一个空间集合体. 单个的视景体,比如一个球体,若要完全 ...

  3. resize([[data],fn]) 当调整浏览器窗口的大小时,发生 resize 事件。

    resize([[data],fn]) 概述 当调整浏览器窗口的大小时,发生 resize 事件.   参数 fnFunctionV1.0 在每一个匹配元素的resize事件中绑定的处理函数.直线电机 ...

  4. delphi SetWindowPos改变窗体位置和状态

    http://blog.163.com/yuanliaofan@126/blog/static/1730690722012534428814/ delphi SetWindowPos改变窗体位置和状态 ...

  5. WPF实现无边框窗体拖拽右下角▲ 改变窗体大小【framwork4.0】 谢谢大家关注

    效果图:(右下角拖拽改变窗体大小) 第一步:添加xaml代码: <Border Name="ResizeBottomRight" MouseMove="Resize ...

  6. 排查在 Azure 中创建、重启 Windows VM 或调整其大小时发生的分配失败

    创建 VM.重新启动已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配 ...

  7. 排查在 Azure 中创建、重启 Linux VM 或调整其大小时发生的分配故障

    创建 VM.重启已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配故障 ...

  8. 变不可能为可能 - .NET Windows Form 改变窗体类名(Class Name)有多难?续篇

    发布<.NET Windows Form 改变窗体类名(Class Name)有多难?>转眼大半年过去了,要不是在前几天有园友对这篇文章进行评论,基本上已经很少关注它了,毕竟那只是一个解惑 ...

  9. [译]GLUT教程 - 改变窗体大小

    Lighthouse3d.com >> GLUT Tutorial >> Basics >> Resizing the Window 上一章的例子创建了两个窗体,命 ...

随机推荐

  1. [Linux] - xxx 不在 sudoers 文件中。此事将被报告。

    redhat系统: linux中创建用户命令为:useradd 用户名, eg: useradd test 指定密码:passwd test 但是有时候我们需要使用test运行执行一些root用户才有 ...

  2. hadoop--安装1.2.1版本

    hadoop的安装分为三种方式,第一种单机安装,一般用于调试(其实一般都不用).第二种,伪分布式安装,一般程序员开发会使用这种方式.第三种,分布式安装,在实际环境中应用.今天在这里记下的是第二种,即伪 ...

  3. Javascript面对对象. 第三篇

    3.字面量 为了让属性和方法很好的体现封装的效果,并且减少不必要的输入原型的创建可以使用字面量. function Box(){} //使用字面量的方法创建原型对象,这里的{}就是对象,是Object ...

  4. CSS3的属性为什么要带前缀

    使用过CSS3属性的同学都知道,CSS3属性都需要带各浏览器的前缀,甚至到现在,依然还有很多属性需要带前缀.这是为什么呢? 我的理解是,浏览器厂商以前就一直在实施CSS3,但它还未成为真正的标准.为此 ...

  5. 阿里巴巴Java开发手册评述

    2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范.随后进行了几次版本修订,目前的版本为v1.0.2版.下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/art ...

  6. memcached学习总结

    一.介绍1.基于libevent的事件处理 libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理.包装 ...

  7. 智能打印SDK---官方博客

    (开源准备:开源为百度云打包开源,GIT太慢,SVN没有免费的,TFS有免费的也慢的要命) 开源地址:http://pan.baidu.com/s/1miobLoO 电子商务越来越成熟,提供的服务越来 ...

  8. WEB中调用Nutch执行JOB抓取

    参考:在Eclipse中运行Nutch 把nutch的源代码导入到eclipse工程自定义抓取任务. 下载源码: http://svn.apache.org/repos/asf/nutch/ 从svn ...

  9. Struts2之访问路径

    上一篇已经和大家分享了关于Struts2命名空间和Action的三种创建方式,本篇我们接着命名空间的内容,来一起探讨一下关于Struts2的访问路径问题,何为访问路径,就是指当我们在浏览器输入地址,点 ...

  10. Asp.net缓存技术(HttpRuntime.Cache)

    一.缓存: 5个等级的缓存 1级是网络级缓存,缓存在浏览器,CDN以及代理服务器中   (举个例子:每个帮助页面都进行了缓存,访问一个页面的代码非常简单) 2级是由.net框架 HttpRuntime ...