小编Dan*_*one的帖子

Qt.ScrollBarAsNeeded在实际需要时不显示滚动条

我正在使用PyQt5实现一个python应用程序,在使用QScrollArea时遇到了一些问题.这是我的应用程序的布局:

在此输入图像描述

它由2个QScrollArea(左右窗格)和一个QMdiArea(中心小部件)组成QHBoxLayout.当我通过点击控制展开左侧窗格中的小部件,以及的高度QWidgetQScrollArea比,则高度更大的QScrollArea本身,会出现滚动条(如预期),但它重叠的内容QScrollArea.为了解决这个问题,我重新实现了resizeEvent为滚动条添加必要的空间(直到这一切都有效.

在此输入图像描述

现在,当我手动调整主窗口的大小时,左侧窗格会获得更多空间,滚动条应该消失(但它没有)并且它与窗格的小部件重叠:

在此输入图像描述

我还尝试手动切换滚动条的可见性(当收到resizeEvent时):当我这样做时,我可以成功隐藏滚动条但是我无法再显示它(无论我setVisible(True)是否在滚动条上调用).这会导致添加滚动条的空间,但缺少滚动条,并且窗格的内容不可滚动:

在此输入图像描述

以下是窗格小部件的实现:

class Pane(QScrollArea):

    MinWidth = 186

    def __init__(self, alignment=0, parent=None):
        super().__init__(parent)
        self.mainWidget = QWidget(self)
        self.mainLayout = QVBoxLayout(self.mainWidget)
        self.mainLayout.setAlignment(alignment)
        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.mainLayout.setSpacing(0)
        self.setContentsMargins(0, 0, 0, 0)
        self.setFrameStyle(QFrame.NoFrame)
        self.setFixedWidth(Pane.MinWidth)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)
        self.setWidgetResizable(True)
        self.setWidget(self.mainWidget)

    def resizeEvent(self, resizeEvent):
        if self.viewport().height() < self.widget().height():
            self.setFixedWidth(Pane.MinWidth + 18)
            # THIS DOESN'T WORK
            #self.verticalScrollBar().show()
        else:
            self.setFixedWidth(Pane.MinWidth)
            #self.verticalScrollBar().hide()

    def addWidget(self, widget):
        self.mainLayout.addWidget(widget)

    def …
Run Code Online (Sandbox Code Playgroud)

python qt python-3.x qscrollarea pyqt5

8
推荐指数
1
解决办法
1401
查看次数

冻结PyQt5应用程序时OSX上的cx_Freeze错误

我正在使用cx_Freeze来冻结PyQt5 python应用程序并生成一个OSX应用程序包,我遇到了以下问题:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/cx_Freeze/freezer.py:590: UserWarning: Duplicate name: 'importlib/__init__.pyc'
outFile.writestr(zinfo, data)
copying /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/PyQt5/QtCore.so -> /Users/daniele/Documents/workspace/pygraphol/build/pyGraphol-0.1.0-gpl-darwin/PyQt5.QtCore.so
copying /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/PyQt5/QtCore.so -> /Users/daniele/Documents/workspace/pygraphol/build/pyGraphol-0.1.0-gpl-darwin/QtCore.so
copying /Library/Frameworks/Python.framework/Versions/3.4/lib/QtCore.framework/Versions/5/QtCore -> /Users/daniele/Documents/workspace/pygraphol/build/pyGraphol-0.1.0-gpl-darwin/QtCore
error: [Errno 2] No such file or directory: '/Library/Frameworks/Python.framework/Versions/3.4/lib/QtCore.framework/Versions/5/QtCore'
Run Code Online (Sandbox Code Playgroud)

我正在使用OSX Yosemite 10.10.4,Python 3.4,使用clang,cx_Freeze 4.3.4针对Qt 5.5构建的PyQt 5.5.我曾经有过使用cx_Freeze来冻结python 2.7应用程序(使用PyQt 5.4)的经验,但从未遇到过这个问题,似乎我无法想出一个解决方案.我试图搜索SO和Google的解决方案,但我发现了与此类似的问题,但提供的解决方案不起作用.

问题是/Library/Frameworks/Python.framework/Versions/3.4/lib/QtCore.framework我的系统上不存在此路径.我不认为这是一个Qt安装问题,因为应用程序运行得很好.

我究竟做错了什么?

python macos cx-freeze python-3.4 pyqt5

5
推荐指数
0
解决办法
959
查看次数

在不同的Linux机器上部署PyQt5应用程序

我一周以来一直在努力解决这个问题所以我想是时候寻求一些帮助了.简而言之:我正在使用Python 3.4和PyQt5构建一个应用程序,我正在使用cx_Freeze来创建我的应用程序的独立可执行文件.在Windows和Mac OS上一切正常我在未安装Qt5的Ubuntu操作系统上执行冻结应用程序时遇到此问题:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: linuxfb, minimal, offscreen, xcb.
Run Code Online (Sandbox Code Playgroud)

应用程序在我用来构建冷冻包(安装Qt5的地方)的机器上运行正常.

我用Google搜索了一下,似乎这个问题很常见.我尝试了以下链接中找到的所有内容:

在冻结的应用程序中,我确实有平台目录libqxcb.so.为了保持一致性,我ldd libqxcb.so在两台安装了Qt5的机器上发布了相同的输出,而另一台我用于测试的地方,我只有一个新的Ubuntu 14.04安装(没有Qt5):

linux-vdso.so.1 =>  (0x00007fff563a3000)
libQt5XcbQpa.so.5 => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feddfeee000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007feddfcec000)
libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007feddfadc000)
libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007feddf8d4000)
libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007feddf6b8000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007feddf499000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007feddf25d000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007feddefba000) …
Run Code Online (Sandbox Code Playgroud)

python ubuntu pyqt cx-freeze pyqt5

5
推荐指数
1
解决办法
709
查看次数

Apple Retina Display上的QGraphicsItem渲染

我正在为我的PyQt5应用程序添加对Apple Retina Display的支持.虽然我成功地设法渲染高分辨率图标(通过在我的所有文件中添加@ 2x后缀.png并设置Qt.AA_UseHighDpiPixmaps我的内容QApplication),但我QGraphicsItem在使用QGraphicsScene+ 渲染高分辨率时遇到了一些麻烦QGraphicsView.

在我的应用程序中,除了加载.png文件之外,我还生成了几个QPixmap我自己(将它们嵌入到a中Icon),以构建符号调色板,用户可以使用这些符号将新形状添加到呈现的图中QGraphicsView,即:

def icon(cls, width, height, **kwargs):
    """
    Returns an icon of this item suitable for the palette.
    :type width: int
    :type height: int
    :rtype: QIcon
    """
    icon = QIcon()
    for i in (1.0, 2.0):
        # CREATE THE PIXMAP
        pixmap = QPixmap(width * i, height * i)
        pixmap.setDevicePixelRatio(i)
        pixmap.fill(Qt.transparent)
        # PAINT THE SHAPE
        polygon …
Run Code Online (Sandbox Code Playgroud)

qt pyqt qgraphicsview qgraphicsitem retina-display

5
推荐指数
1
解决办法
437
查看次数