我正在尝试使用 PyQt5 中的基本语法突出显示、代码完成和可点击的函数和变量来制作一个简单的文本编辑器。我最大的希望是使用 PyQt5 的 QScintilla 端口
。
我在 Eli Bendersky 网站 ( http://eli.thegreenplace.net/2011/04/01/sample-using-qscintilla-with-pyqt )上找到了以下基于 QScintilla 的文本编辑器示例,Victor S. 已将其改编为 PyQt5 )。我认为这个例子是一个很好的起点:
#-------------------------------------------------------------------------
# qsci_simple_pythoneditor.pyw
#
# QScintilla sample with PyQt
#
# Eli Bendersky (eliben@gmail.com)
# This code is in the public domain
#-------------------------------------------------------------------------
import sys
import sip
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.Qsci import QsciScintilla, QsciLexerPython
class SimplePythonEditor(QsciScintilla):
ARROW_MARKER_NUM = 8
def __init__(self, parent=None):
super(SimplePythonEditor, self).__init__(parent)
# Set the default …Run Code Online (Sandbox Code Playgroud) 我需要获取动态内容,该内容由 ajax js 调用加载。
我真的不知道如何使用 PyQt,但我希望我能做到这一点。HTML是这样的:
<a href="#" id="id" onclick="A4J.AJAX.Submit('j_id0:j_id1:j_id110',event,{'similarityGroupingId':'j_id0:j_id1:j_id110:j_id582:0:j_id584'});return false;">NETHERLANDS</a>`
Run Code Online (Sandbox Code Playgroud)
我可以使用以下简单代码使用 PyQt 呈现页面:
def render(source_html):
import sys
from PyQt5.QtCore import QEventLoop
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Render(QWebEngineView):
def __init__(self, html):
self.html = None
self.app = QApplication(sys.argv)
QWebEngineView.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.setHtml(html)
while self.html is None:
self.app.processEvents(QEventLoop.ExcludeUserInputEvents | QEventLoop.ExcludeSocketNotifiers | QEventLoop.WaitForMoreEvents)
self.app.quit()
def _callable(self, data):
self.html = data
def _loadFinished(self, result):
self.page().toHtml(self._callable)
return Render(source_html).html
import requests
sample_html = requests.get('https://riverbankcomputing.com/software/pyqt/').text
print(render(sample_html))
Run Code Online (Sandbox Code Playgroud)
我如何运行“onclick”并获取内容?
我刚刚在我的 Windows 系统上安装了带有 Python 3.6 的 Anaconda 5.2。还通过具有管理员权限的 pip 安装了 pyqt5 和 pyqt5-tools。现在,当我运行 pyuic5.exe 来转换 ui 文件时,它显示以下错误:
Traceback (most recent call last):
File "C:\Users\AshfaqurRahman\Anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "C:\Users\AshfaqurRahman\Anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\AshfaqurRahman\AppData\Roaming\Python\Python36\site-packages\PyQt5\uic\pyuic.py", line 26, in <module>
from PyQt5 import QtCore
ModuleNotFoundError: No module named 'PyQt5.sip'
Run Code Online (Sandbox Code Playgroud)
我尝试使用 pip 安装 PyQt5-sip 包。但是它已经安装在我的系统中。
为什么会出现这个问题?我怎么解决这个问题?
我正在研究 PyQt5 GUI,到目前为止,我只是有使用 python 脚本的经验,并没有深入研究创建用户界面。
GUI 必须用于不同的屏幕(可能还有一些旧的 4:3 比例屏幕),并且需要在不同尺寸下看起来不错。现在,我让我的生活更轻松的方法是强制执行窗口的固定纵横比并根据窗口大小调整不同元素的大小。
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent= None):
super().__init__(parent)
self.form_widget = FormWidget(self)
self.setCentralWidget(self.form_widget)
self.resize(200, 400)
self.sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.sizePolicy.setHeightForWidth(True)
self.setSizePolicy(self.sizePolicy)
def heightForWidth(self, width):
return width * 2
class FormWidget(QtWidgets.QWidget):
def __init__(self, parent):
super().__init__(parent)
def resizeEvent(self, event):
f = self.font()
temp = event.size().height()
f.setPixelSize(temp / 16)
self.setFont(f)
return super().resizeEvent(event)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
根据窗口大小调整元素大小工作正常,但根本不保留窗口纵横比。我heightForWidth从旧的 PyQt4 …
升级到 python-pyqt5 5.12-2 后,当我尝试从 QtWidgets 导入时出现此错误
from PyQt5.QtWidgets import *
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'PyQt5.sip'
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?
我尝试使用安装 PyQt5
pip install PyQt5
Run Code Online (Sandbox Code Playgroud)
和
sudo -H pip install PyQt5
Run Code Online (Sandbox Code Playgroud)
他们都给了我错误
ERROR: Could not find a version that satisfies the requirement PyQt5 (from versions: none)
ERROR: No matching distribution found for PyQt5
Run Code Online (Sandbox Code Playgroud)
我使用 Ubuntu 18.04。
我的python版本是:Python 2.7.15rc1
我已经安装了 python3-pip 并尝试使用安装 PyQt5
pip3 install PyQt5
Run Code Online (Sandbox Code Playgroud)
我收到错误
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3241, in <module>
@_call_aside
File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3225, in _call_aside
f(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3254, …Run Code Online (Sandbox Code Playgroud) 我们有一个Foobar.lib由客户提供的外部库 ( ),它链接到Qt5Core.dll。我们必须在我们自己的代码中使用该库。
在我们的环境中,我们使用 conda 和 conda-forge 提供的 Qt 库,并且 conda-forge 维护者决定将后缀附加
_conda到所有.lib和.dll文件(不知道为什么),所以我们最终在Qt5Core_conda.dll我们的PATH.
这是一个问题,因为我们的运行时要么找不到,要么同时Qt5Core.dll加载,这不起作用,因为一个库中的全局变量不会被另一个库(特别是全局变量)看到。Qt5Core.dllQt5Core_conda.dllQApplication
我们遇到的一件事是打开Foobar.lib并手动更改引用从Qt5Core.dllto Qt5Core_conda.dll,但是考虑到名称较大,我们需要向文件添加新字节,这会弄乱其中的地址(我们怀疑如果我们想要减少名称是可能的)。
我们正在寻找一种方法来更新/重写Foobar.lib以指向Qt5Core_conda.dll而不是Qt5Core.dll,有什么建议吗?
我们的环境是Windows。
我有像素图:
pixmap = self._screen.grabWindow(0,
self._x, self._y,
self._width, self._height)
Run Code Online (Sandbox Code Playgroud)
我想将其转换为 OpenCV 格式。我尝试将其转换为numpy.ndarray如此处所述,但出现错误sip.voidptr object has an unknown size
有没有办法获得 numpy 数组(与cv2.VideoCapture read方法返回的格式相同)?
我的代码是用 PyQt4 创建的,我想将它转换为 PyQt5。我尝试了一些脚本来转换代码;但是,除了名字,什么都没有改变。我需要手动更改什么才能使代码与 PyQt5 一起使用?
这是我的代码的第一部分:
import sys
from pymaxwell import *
from numpy import *
from PyQt4 import QtGui, QtCore, uic
from PyQt4.QtGui import QMainWindow, QApplication
from PyQt4.QtCore import *
from PyQt4.phonon import Phonon
from ffmpy import FFmpeg
import os
import app_window_dark
import about
uifile = 'Ui/app_window_dark.ui'
aboutfile = 'Ui/about.ui'
Ui_MainWindow, QtBaseClass = uic.loadUiType(uifile)
Ui_Dialog= uic.loadUiType(uifile)
class About(QtGui.QMainWindow, about.Ui_Dialog):
def __init__(self, parent=None):
super(About, self).__init__()
QtGui.QMainWindow.__init__(self, parent)
Ui_Dialog.__init__(self)
self.setWindowModality(QtCore.Qt.ApplicationModal)
point = parent.rect().bottomRight()
global_point = parent.mapToGlobal(point)
self.move(global_point - QPoint(395, 265)) …Run Code Online (Sandbox Code Playgroud) 我正在使用给定的代码,我希望用户在 QLineEdit 小部件中输入文本,按复制!按钮并查看输入的文本替换“N/A”标签。我的问题是:按照此过程,如何通过简单的鼠标单击清除 QLineEdit 小部件中输入的文本?
从我读到的(this、this和this)来看,我似乎需要在扩展 QLineEdit 的新类中重新实现 focusInEvent()。我的问题是我的 GUI 代码是使用 pyuic5 从 Qt Designer 导入的,上面引用的示例似乎没有考虑到这一点。
这是我的代码:
from PyQt5.QtWidgets import *
import sys
import QLineEdit_test
class MainWindow(QMainWindow, QLineEdit_test.Ui_QLineEdit_test):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.copy_button.clicked.connect(self.copy_and_print)
def copy_and_print(self):
self.label.setText(self.lineEdit.text())
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
这是我转换后的 .ui 文件:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_QLineEdit_test(object):
def setupUi(self, QLineEdit_test):
QLineEdit_test.setObjectName("QLineEdit_test")
QLineEdit_test.resize(300, 200)
QLineEdit_test.setMaximumSize(QtCore.QSize(300, 200))
self.centralwidget = …Run Code Online (Sandbox Code Playgroud) pyqt5 ×10
pyqt ×8
python ×8
python-3.x ×5
qt ×2
anaconda ×1
aspect-ratio ×1
dll ×1
html ×1
javascript ×1
numpy ×1
pip ×1
pyqt4 ×1
qpixmap ×1
qscintilla ×1
qt-designer ×1