PyQt通過resize改變表單大小時ListWidget顯示異常

來源:互聯網
上載者:User

標籤:ges   改變   form   技術   音樂   exec   gen   apr   素材   

  

 

 

  前幾天開始的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 dearveeimport sysfrom PyQt5 import QtCore, QtGui, QtWidgetsclass 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 sysfrom PyQt5 import QtCore, QtGui, QtWidgetsclass 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顯示異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.