我正在尝试学习PyQt5,但我发现这非常困难,因为我无法仅仅猜测可用的方法。我花了整整一个星期的时间来尝试找到一种模拟按钮按下的方法。我只有在碰到一个人被遗忘的例子(这个人怎么知道这个?)之后才找到解决方案(QPushButton.animateClick())。如果不参考工具可用内容,就很难开发! Riverbank具有我要查找的版本,但还不够完善,因此几乎没有用。
答案 0 :(得分:2)
pyqt5是qt5绑定,几乎具有所有功能(已知的最小不兼容性),因此qt5文档:https://doc.qt.io/对pyqt5有效除了一些小例外。
尽管文档的目标是c++,但是类和方法的描述是通用的,因此它们也有效地适用于pyqt5,另一方面,许多示例都用{{ 3}},但在许多情况下,将python转换为微不足道的内容。
因此,为了避免执行双重任务,似乎 Riverbank Computing Limited 仅记录c++文档中指出的异常:pyqt5
我的答案的下一部分将提出处理Qt文档的提示。
Qt文档也具有易于理解的结构,例如,让我们分析QPushButton类(https://www.riverbankcomputing.com/static/Docs/PyQt5/):
顶部有一张桌子:
https://doc.qt.io/qt-5/qpushbutton.html
该表指示如何在C ++项目中包括该类,如何将其添加到qmake,它从哪个类继承以及从哪个类继承。从上面可以提取PyQt5的相关信息,例如该类所属的子模块:在这种情况下,我们使用QT += widgets
通知我们它属于QtWidgets
子模块,一般来说,如果Qt += submodulefoo
属于QtSubModuleFoo
(驼峰)
如果您想了解QPushButton类的所有方法,则必须使用表格下方的“所有成员的列表,包括继承的成员” 链接,在这种情况下,该链接为{ {3}}是所有类方法,枚举等的完整列表。
了解Qt / C ++与PyQt5 / Python之间的转换的其他技巧是:
某些方法使用指针来接收信息,例如:
那些转换为PyQt5的对象:
lay = QtWidgets.QXLayout()
left, top, right, bottom = lay.getContentsMargins()
process = QProcess()
# ...
ok, pid = process.startDetached()
某些方法与诸如exec
,raise
,print
等保留字冲突,因此为避免不兼容,在末尾添加了下划线:{{1} },exec_
,raise_
等
在Qt中,通过void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const
装饰器使用翻译成python的bool QProcess::startDetached(qint64 *pid = nullptr)
。
最后,我的建议是,您同时使用Qt和PyQt5文档来了解所有功能,此外,SO中有很多关于从一种语言到另一种语言的翻译的问答,因此您可以从那里学习。 / p>
还可以使用Qt the Q_SLOT and Q_SIGNAL工具来查阅Qt文档。
答案 1 :(得分:0)
主要的PyQt5文档位于官方网站上:
https://www.riverbankcomputing.com/static/Docs/PyQt5/
但是它仍然是不完整的,大部分内容都参考了官方的Qt文档:
虽然是面向C ++的,但请考虑几乎每个模块,类和函数的行为都与python中的完全相同,因此通常最好使用它。
考虑:
[const] Type argName=default
的形式编写:您通常可以忽略“ const”部分(这是C ++术语),而关键字参数可能的argName在PyQt; self.width()
和self.setWidth()
; 我的建议是始终使用官方文档,习惯C ++引用只是一个习惯问题(而且您也会发现它具有教育意义);每当有疑问时,请查看PyQt文档以了解有什么不同,并在python shell中使用help
命令。