【问题标题】:PyQt5 QListView sluggish first drag/drop on windows - python 3.5/3.4 32bit, pyqt5 from sourceforgePyQt5 QListView 在 Windows 上的第一次拖放缓慢 - python 3.5/3.4 32bit,来自 sourceforge 的 pyqt5
【发布时间】:2016-08-23 05:46:38
【问题描述】:

我已经通过https://sourceforge.net/projects/pyqt/ 提供的可执行文件在我们的 Windows 7 工作机器上安装了 32 位 Python 3.4 和 3.5 以及 PyQt5,但是我现在发现当我运行我的简单拖放测试代码时,移动第一个非常缓慢元素(在完成移动之前,用户界面会冻结大约 4-5 秒)。所有后续的拖放操作都不会延迟。

“ui 冻结”是指当我将光标移开和拖放引导图形时,选择仍然处于高亮状态并保持在其原始位置(如果我放开鼠标按钮,则会出现一条线,项目将移动到的位置此时,鼠标光标变为不同的图标以指示正在进行拖放)不会出现。如果我在此期间释放鼠标按钮,则所选元素将移动到该位置,但直到 4-5 秒的等待时间过去。

代码如下:

from PyQt5.QtWidgets import QMainWindow, QApplication, QListView, QAbstractItemView
from PyQt5.QtGui import QStandardItemModel, QStandardItem

def createModel():
    model = QStandardItemModel()
    for i in range(0,101): 
        item = QStandardItem(str(i))
        item.setText(str(i))
        item.setEditable(False)
        item.setDropEnabled(False)
        model.appendRow(item)
    return model

class TestListView(QMainWindow):
    def __init__(self, parent=None):
        super(TestListView, self).__init__(parent)
        self.listView = QListView()
        self.setCentralWidget(self.listView)
        self.listView.setModel(createModel())
        self.listView.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.listView.setDragEnabled(True)
        self.listView.setDragDropMode(QAbstractItemView.InternalMove)

def main():
    app = QApplication([])
    lvt = TestListView()
    lvt.show()
    app.exec_()

if __name__ == '__main__':
    main()

我希望有人能指出我犯的一个愚蠢的错误,这是导致此问题的原因(例如,当我之前将整数而不是字符串传递给 QStandardItems 构造函数时,每次我尝试拖动时都会导致崩溃并丢弃),但如果不是这种情况,是否有人能够推荐他们发现不表现出这种行为的 pyqt5 和 32 位(64 位不是我们的选项)的组合?我真的不在乎它是 python 3.x 还是 python 2.x(虽然我之前没有见过任何 pyqt5/python2 组合),只要它可以工作。

我已经在 3.4 和 3.5 中尝试了 pip 安装的 python-qt5 包(按照此处的说明https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/ 通过安装可视化 c++ 构建工具),但该脚本的完整版本将使用来自的 .ui 文件QtCreator,python-qt5的pip版本抛出错误:

  File "testReorder.py", line 2, in <module>
    from PyQt5 import uic
  File "c:\python35-32\lib\site-packages\PyQt5\uic\__init__.py", line 43, in <module>
    from .Compiler import indenter, compiler
  File "c:\python35-32\lib\site-packages\PyQt5\uic\Compiler\compiler.py", line 43, in <module>
    from ..properties import Properties
  File "c:\python35-32\lib\site-packages\PyQt5\uic\properties.py", line 46, in <module>
    from .icon_cache import IconCache
  File "c:\python35-32\lib\site-packages\PyQt5\uic\icon_cache.py", line 27, in <module>
    from .port_v3.as_string import as_string
ImportError: No module named 'PyQt5.uic.port_v3'

当我包含导入行时

from PyQt5 import uic

在代码中。

编辑:回到家并在我的 linux 机器上测试了代码(并没有看到任何缓慢的迹象),我认为这个问题必须是特定于 pyqt、python 和 windows 版本的组合,或者是特定的到那个特定的 Windows 安装,而不是我的代码的问题。

我仍然有兴趣听到任何人能够运行相同的代码并且在 Windows(尤其是 Windows 7)机器上看不到相同的问题,但我认为我不太可能将责任归咎于这种行为只发生在 pyqt 的门口。

【问题讨论】:

    标签: python windows drag-and-drop pyqt5


    【解决方案1】:

    在另一台安装了相同软件包的 Windows 7 计算机上运行相同的代码。那里没有看到问题,所以显然是这台机器特有的问题,而不是我编写的代码/我正在使用的 python 版本/pyqt 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2017-05-27
      • 2018-10-18
      • 2014-10-17
      • 2017-03-07
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多