小编Spe*_*cer的帖子

自定义 QSizeGrip 来调整 QListWidget 的大小

我想制作一个底部带有调整大小手柄的 QListWidget(类似于您在这样的网页上看到的文本字段)。我看到有几个人问同样的问题,但没有找到完整的例子。

我有一些代码几乎就在那里,但它在调整大小期间闪烁,所以我猜测我在调整大小策略或布局或其他东西方面缺少一些东西......

这是我的“工作”示例。理论非常简单,您只需在小部件的 mousePressEvent 中测量鼠标移动的距离并相应地调整大小/位置即可。不幸的是我错过了一些基本的东西,我不知道是什么:

from PyQt4 import QtGui
import sys

class Grip(QtGui.QLabel):
    def __init__(self, parent, move_widget):
        super(Grip, self).__init__(parent)
        self.move_widget = move_widget
        self.setText("+")
        self.min_height = 50

        self.mouse_start = None
        self.height_start = self.move_widget.height()
        self.resizing = False
        self.setMouseTracking(True)


    def showEvent(self, event):
        super(Grip, self).showEvent(event)
        self.reposition()

    def mousePressEvent(self, event):
        super(Grip, self).mousePressEvent(event)
        self.resizing = True
        self.height_start = self.move_widget.height()
        self.mouse_start = event.pos()

    def mouseMoveEvent(self, event):
        super(Grip, self).mouseMoveEvent(event)
        if self.resizing:
            delta = event.pos() - self.mouse_start
            height = self.height_start + delta.y()
            if height > self.min_height:
                self.move_widget.setFixedHeight(height)
            else: …
Run Code Online (Sandbox Code Playgroud)

python pyqt qlistwidget pyqt4

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

PyQt 打印 QWidget

我尝试按照文档打印 QWidet,但收到错误。当我运行以下代码时,我得到了QPaintDevice: Cannot destroy paint device that is being painted.

import sys
from PyQt4 import QtGui, QtCore

class SampleApp(QtGui.QDialog):
    def __init__(self):
        super().__init__()

        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        text_editor = QtGui.QTextEdit()
        layout.addWidget(text_editor)

        button = QtGui.QPushButton("Print")
        layout.addWidget(button)
        button.clicked.connect(self.print_me)

    def print_me(self):
        printer = QtGui.QPrinter()
        printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
        printer.setOutputFileName("Test.pdf")

        self.painter = QtGui.QPainter(printer)
        margins = printer.getPageMargins(QtGui.QPrinter.DevicePixel)
        xscale = (printer.pageRect().width() - margins[0]) / self.width()
        yscale = (printer.pageRect().height() - margins[1]) / self.height()
        scale = min(xscale, yscale)
        self.painter.scale(scale, scale)

        self.render(self.painter)

app = QtGui.QApplication(sys.argv)
ex = SampleApp()
ex.show() …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 qpainter qprinter

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

Python Windows 枚举安装的字体

我正在尝试获取 Windows 机器上已安装字体的列表,以便我可以安装缺少的字体。我在 Py3.* 上,Windows 7。

查看win API文档我知道我需要使用EnumFontFamiliesExW但是我不确定python中ctypes的正确语法是什么......我对ctypes模块完全陌生,并且对C了解不多. ctypes 的 python 文档对我来说非常难以理解,如果我无法在那里找到这个答案,很抱歉(我确实看过)。

我得到了以下几点:

gdi32 = ctypes.WinDLL('gdi32')
print(gdi32.EnumFontFamiliesExW())
Run Code Online (Sandbox Code Playgroud)

这当然会引发错误,因为我没有指定任何参数。那么我如何传递正确的参数呢?

python winapi fonts ctypes python-3.x

4
推荐指数
1
解决办法
1180
查看次数

Python多进程/多线程可加快文件复制

我有一个程序,可以将大量文件从一个位置复制到另一个位置-我说的是100,000个以上的文件(此刻我正在按图像顺序复制314g)。它们都位于极端的大型,非常快速的网络存储RAID上。我正在使用shutil顺序复制文件,这需要一些时间,因此我试图找到最佳方法来对此进行优化。我注意到有些软件可以有效地使用多线程从网络中读取文件,从而大大缩短了加载时间,因此我想尝试在python中进行此操作。

我没有编程多线程/多进程的经验-这似乎是正确的领域吗?如果是这样,最好的方法是什么?我看过其他一些关于在python中复制线程文件的SO帖子,它们似乎都说您没有速度提高,但是考虑到我的硬件,我认为情况不会如此。目前,我的IO上限还差得远,资源只占1%左右(我本地有40个内核和64g的RAM)。

  • 斯宾塞

python multithreading shutil

3
推荐指数
2
解决办法
3698
查看次数

PyQt 通过适当的抗锯齿调整 QMovie 的大小

我创建了一个 QLabel 并将其电影设置为带有动画 gif 的 QMovie 对象。然后在我的应用程序的 resizeEvent 中,我调整标签大小并移动标签,以便它居中/适合布局。这工作正常,但电影有很多细线,在调整大小操作中完全乱码,似乎没有抗锯齿。那么要么我使用了错误的调整大小方法,要么我需要在某个地方正确设置抗锯齿?QMovie 或 QLabel 文档中没有任何内容建议如何执行此操作。我确实读到 QMovie 是从 QImageReader 继承的,尽管它也没有我能找到的抗锯齿属性。

编辑

我确实在某种程度上让它发挥了作用,但它仍然不太正确。我发现 QMovie 有一个 setScaledSize 方法,它实际上缩放了底层的 QImageViewer。然后我只需根据其内容(即电影)调整标签即可。使用下面的代码,我可以通过适当的抗锯齿调整影片的大小,但是在调整大小期间它非常“跳跃”和“闪烁”,所以显然我做得不太“正确”。有时它也会以某种方式失去纵横比。仍在寻找正确的方法来执行此操作...也许 QLabel 是错误的方法?

这是一个工作示例

import sys
from PyQt4 import QtGui

class MovieTest(QtGui.QDialog):
    def __init__(self):
        super(MovieTest, self).__init__()

        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        self.loading_lbl = QtGui.QLabel()
        self.loading_lbl.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicyIgnored)
        self.loading_lbl.setScaledContents(True)
        layout.addWidget(self.loading_lbl)
        loading_movie = QtGui.QMovie("loading-radial_loop.gif") # some gif in here
        self.loading_lbl.setMovie(loading_movie)
        loading_movie.start()

        self.setGeometry(50,50,100,100)
        self.setMinimumSize(10,10)

    def resizeEvent(self, event):
        rect = self.geometry()
        size = min(rect.width(), rect.height())
        movie = self.loading_lbl.movie()
        movie.setScaledSize(QtCore.QSize(size, size))
        self.loading_lbl.adjustSize()

def main():
    app …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 qlabel

3
推荐指数
1
解决办法
6186
查看次数

来自python脚本的extendscript返回参数

我正在处理一个需要在服务器上迭代数万个文件名的扩展脚本代码(Adobe After Effects - 但它基本上只是 javascript)。这在扩展脚本中非常慢,但我可以在几秒钟内使用 python 完成我需要的操作,无论如何,python 是我的首选语言。所以我想运行一个python文件并将一个数组返回给extendscript。我可以通过创建和执行批处理文件来运行我的 python 文件并传递一个参数(根文件夹),但是如何将结果(一个数组)传递回扩展脚本?我想我可以写出一个 .csv 并将其读回来,但这似乎有点“hacky”。

python extendscript batch-file

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

获取 QHeaderView 中的标题部分文本

我在 QTableWidget 中对 QHeaderView 进行子类化,以提供隐藏/显示部分的自定义功能。有没有办法从标题视图中获取部分的文本?我知道我可以在表格范围内做到这一点,但这不是我想要做的。

我意识到数据存储在模型内部,但是以下测试仅返回“无”:

self.model().index(0,0).data()
Run Code Online (Sandbox Code Playgroud)

python pyqt qheaderview

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