【发布时间】: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