用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口

本文是对Python Qt GUI快速编程的第6章的例子MainWindow改写成python3+PyQt5的编码。改动中,本人发现了不少的坑要改动,下文大概列出一些需要更改的重点,并且附上改动后的代码,代码在Python3.5+PyQt5.7的环境下运行并测试正常。请大家参考学习。
此实例有以下程序:
/home/yrd/eric_workspace/charter6/Ui_newimagedlg.py
/home/yrd/eric_workspace/charter6/newimagedlg.py
/home/yrd/eric_workspace/charter6/helpform.py
/home/yrd/eric_workspace/charter6/resizedlg.py
/home/yrd/eric_workspace/charter6/mainwindow.py
资源文件:
/home/yrd/eric_workspace/charter6/resources.qrc
/home/yrd/eric_workspace/charter6/images
/home/yrd/eric_workspace/charter6/help
可在网路上寻找作者这本书的的代码资源获得资源文件。
重点内容:
1,因为settings.value(“RecentFiles”)本身就是list类型,故
self.recentFiles = settings.value(“RecentFiles”).toStringList()
改动为
self.recentFiles=settings.value(“RecentFiles”)
2,类型转换问题

self.restoreGeometry(
      settings.value("MainWindow/Geometry").toByteArray())
self.restoreState(settings.value("MainWindow/State").toByteArray())

改动为

self.restoreGeometry(
     QByteArray(settings.value("MainWindow/Geometry")))
self.restoreState(QByteArray(settings.value("MainWindow/State")))  

3,引入库的问题,有很多,只列一个例子:
from PyQt5.QtPrintSupport import QPrinter,QPrintDialog
4,实例中的坑,QFileDialog.getSaveFileName和QFileDialog.getOpenFileName所返回的结果是一个tupple。第一为文件名,第二个为文件类型。

fname,tpye = QFileDialog.getSaveFileName(self,
       "Image Changer - Save Image", fname,
       "Image files ({0})".format(" ".join(formats)))

fname,tpye = QFileDialog.getOpenFileName(self,
       "Image Changer - Choose Image", dir,
       "Image files ({0})".format(" ".join(formats)))

5,PyQt5开发中应该以python的字符串类型取代Qstring类型。self.recentFiles是list类型,故用append或insert而非prepend。

    def addRecentFile(self, fname):
        if fname is None:
            return
        if not self.recentFiles.contains(fname):
            self.recentFiles.prepend(QString(fname))
            while self.recentFiles.count() > 9:
                self.recentFiles.takeLast()
改成
    def addRecentFile(self, fname):
        if fname is None:
            return
        if fname not in self.recentFiles:
            self.recentFiles.insert(0,fname)
            while len(self.recentFiles) > 9:
                self.recentFiles.pop()

6,信号槽的问题,现举个例子:
self.connect(action, SIGNAL(“triggered()”),self.loadFile)
改成
action.triggered[bool].connect(self.loadFile)
槽self.loadFile根据实际情况也做了些变动。


需要通过pyrcc5将resources.qrc转换成py文件,并在主程序引入。
pyrcc5 -o resources_rc.py resources.qrc

/home/yrd/eric_workspace/charter6/resources.qrc

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="filenew.png">images/filenew.png</file>
<file alias="fileopen.png">images/fileopen.png</file>
<file alias="filesave.png">images/filesave.png</file>
<file alias="filesaveas.png">images/filesaveas.png</file>
<file alias="fileprint.png">images/fileprint.png</file>
<file alias="filequit.png">images/filequit.png</file>
<file alias="editinvert.png">images/editinvert.png</file>
<file alias="editswap.png">images/editswap.png</file>
<file alias="editzoom.png">images/editzoom.png</file>
<file alias="editmirror.png">images/editmirror.png</file>
<file alias="editunmirror.png">images/editunmirror.png</file>
<file alias="editmirrorhoriz.png">images/editmirrorhoriz.png</file>
<file alias="editmirrorvert.png">images/editmirrorvert.png</file>
<file alias="back.png">images/back.png</file>
<file alias="home.png">images/home.png</file>
<file alias="icon.png">images/icon.png</file>

<file>help/editmenu.html</file>
<file>help/filemenu.html</file>
<file>help/index.html</file>
</qresource>
</RCC>

/home/yrd/eric_workspace/charter6/Ui_newimagedlg.py

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

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_NewImageDlg(object):
    def setupUi(self, NewImageDlg):
        NewImageDlg.setObjectName("NewImageDlg")
        NewImageDlg.resize(287, 214)
        self.gridlayout = QtWidgets.QGridLayout(NewImageDlg)
        self.gridlayout.setContentsMargins(9, 9, 9, 9)
        self.gridlayout.setSpacing(6)
        self.gridlayout.setObjectName("gridlayout")
        self.buttonBox = QtWidgets.QDialogButtonBox(NewImageDlg)
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.gridlayout.addWidget(self.buttonBox, 5, 1, 1, 2)
        spacerItem = QtWidgets.QSpacerItem(269, 16, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridlayout.addItem(spacerItem, 4, 0, 1, 3)
        self.colorLabel = QtWidgets.QLabel(NewImageDlg)
        self.colorLabel.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.colorLabel.setFrameShadow(QtWidgets.QFrame.Raised)
        self.colorLabel.setText("")
        self.colorLabel.setScaledContents(True)
        self.colorLabel.setObjectName("colorLabel")
        self.gridlayout.addWidget(self.colorLabel, 3, 1, 1, 1)
        self.label_3 = QtWidgets.QLabel(NewImageDlg)
        self.label_3.setObjectName("label_3")
        self.gridlayout.addWidget(self.label_3, 3, 0, 1, 1)
        self.colorButton = QtWidgets.QPushButton(NewImageDlg)
        self.colorButton.setObjectName("colorButton")
        self.gridlayout.addWidget(self.colorButton, 3, 2, 1, 1)
        self.brushComboBox = QtWidgets.QComboBox(NewImageDlg)
        self.brushComboBox.setObjectName("brushComboBox"
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值