PyQt通過resize改變窗體大小時ListWidget顯示異常


  

 

 

  前幾天開始的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:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM