我有一个QGroupBox
带有孩子的小部件,我想删除它.我怎么做?我找不到任何removeWidget
,removeChild
,removeItem
或任何类似的文档.我只能看到如何从布局中删除内容,但显然不会将其从实际的小部件中删除.
我喜欢python和Qt,但对我来说很明显,Qt并不是用python设计的.有许多方法可以使PyQt/PySide应用程序崩溃,其中许多方法都非常难以调试,即使使用适当的工具也是如此.
我想知道:使用PyQt和PySide时,避免崩溃和锁定的好方法是什么?这些可以是从一般编程技巧和支持模块到高度特定的变通方法和要避免的错误.
我使用Python 3和PyQt5.这是我的测试PyQt5程序,重点关注最后两行:
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class window(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle('test')
self.resize(250,200)
app=QApplication(sys.argv)
w=window()
w.show()
sys.exit(app.exec())
#sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
我知道exec
是Python中的语言关键字.但官方PyQt5文档 上的代码(特别是退出部分的Object Destruction).我看到这个例子显示使用app.exec()
它让我感到困惑.
当我在我的机器上测试它时.我发现与我的目的没有任何明显的区别.有和没有_
产生相同的输出没有时间差.
我的问题是:
app.exec()
吗?喜欢与Python的内部冲突exec
?我怀疑是因为两人exec
正在执行某些事情.我开始在一些项目中使用PyQt,而且我遇到了风格困境.PyQt的函数使用驼峰的情况,但我更喜欢遵循的PEP8表示使用下划线和函数名称的全部小写.
所以一方面,我可以继续关注PEP8,这意味着我的代码将混合函数调用驼峰大小写和下划线函数,甚至我的类也会有混合函数名,因为我需要重载函数如mousePressEvent .或者,我可以打破PEP8,并以一致性的名义为我的所有函数名称采用驼峰案例.
我意识到这是主观的,这真的是我个人喜欢的,但我喜欢听别人说他们做了什么以及他们选择这样做的原因.
我只需要一个简单的例子来说明如何在我的系统托盘上轻松放置带有python的图标.这意味着:我运行程序,没有窗口显示,只有一个托盘图标(我有一个png文件)显示在系统托盘中,当我右键单击它时,会出现一个带有一些选项的菜单(当我点击时在一个选项上,运行一个函数).那可能吗?我根本不需要任何窗口......
示例/代码片段非常感谢!:d
我正在编写PyQt应用程序,但在创建自定义列表视图时遇到了一些麻烦.我希望列表包含任意小部件(特别是一个自定义小部件).我该怎么做?
似乎替代方案是创建一个包含在滚动条中的表格或网格视图.但是,我希望能够利用模型/视图方法以及嵌入(树视图)支持内置函数句柄.
为了澄清,自定义小部件是交互式的(包含按钮),因此解决方案不仅仅需要绘制小部件.
请帮我用PyQt设计MVC模式.我想将所有程序拆分为3个部分:
它是最佳的,并且在PyQt开发中使用了什么方案?
PS:抱歉我的英文=)
我正在尝试学习如何在PyQt Gui应用程序中使用QThreads.我有一些运行一段时间的东西,有(通常)点我可以更新一个Gui,但我想将主要工作拆分到它自己的线程(有时候东西会卡住,最终会有一个很好的取消/再试一次按钮,如果由于主循环被阻止,Gui被冻结,这显然不起作用).
我已阅读https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/.该页面说重新实现该run
方法不是这样做的方法.我遇到的问题是找到一个PyQt示例,其中有一个主线程正在执行Gui,而一个工作线程没有这样做.这篇博文是针对C++的,所以虽然它的例子确实有帮助,但我仍然有点失落.有人可以请给我一个在Python中正确方法的例子吗?
pip3 install PyQt5
Collecting PyQt5
Using cached https://files.pythonhosted.org/packages/3a/fb/eb51731f2dc7c22d8e1a63ba88fb702727b324c6352183a32f27f73b8116/PyQt5-5.14.1.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.6/tokenize.py", line 452, in open
buffer = _builtin_open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-b2zw891b/PyQt5/setup.py'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-b2zw891b/PyQt5/
Run Code Online (Sandbox Code Playgroud)
然后我从https://www.riverbankcomputing.com/software/pyqt/download5下载了 zip 文件夹并运行:
python3 configure.py --qmake /home/oo/Qt/5.14.0/gcc_64/bin/qmake
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
成功的
>>> import PyQt5
>>> import PyQt5.QtCore
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud) 使用pyqt4和python 2.6,我使用qcombobox提供选项列表.我在使用所选选项时遇到问题.当选择该选项时,我能够使用信号触发方法,但问题是当用户点击运行时,需要考虑其中几个组合框的内容.所以基本上我需要将组合框的选定内容作为字符串.到目前为止,我只能使用这个:
print combobox1.currentText()
Run Code Online (Sandbox Code Playgroud)
得到这个:
PyQt4.QtCore.QString(u'Test Selection2')
Run Code Online (Sandbox Code Playgroud)
当我真正想要的是"测试选择"位时,任何想法?我的组合框是这样的:
combobox1 = qt.QComboBox()
combobox1.addItems(['Test Selection1', 'Test Selection2'])
mainLayout.addWidget(combobox1, 0, 0)
Run Code Online (Sandbox Code Playgroud) pyqt ×10
python ×9
qt ×5
pyqt4 ×4
pyqt5 ×2
coding-style ×1
pep8 ×1
pyqtchart ×1
python-2.6 ×1
python-3.x ×1
qcombobox ×1
qlistview ×1
qlistwidget ×1
qthread ×1
systray ×1
tray ×1
widget ×1
wxpython ×1