【发布时间】:2021-01-01 16:32:22
【问题描述】:
我目前正在尝试使用提升的 QtWidget 在我的 PyQT5 脚本中嵌入 QtWebEngine,但我无法使其正常工作。
这是我的代码:
import sys
import os
import platform
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import (QCoreApplication, QPropertyAnimation, QDate, QDateTime, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt, QEvent)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont, QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter, QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, uic
# UI File
from harvester_ui import Window
from ui_functions import *
class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Window()
self.ui.setupUi(self)
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.ui.minimize.clicked.connect(lambda: self.showMinimized())
self.ui.close.clicked.connect(app.exit)
def moveWindow(w):
if w.buttons() == Qt.LeftButton:
self.move(self.pos() + w.globalPos() - self.clickPosition)
self.clickPosition = w.globalPos()
w.accept()
self.ui.label.mouseMoveEvent = moveWindow
self.show()
def mousePressEvent(self, event):
self.clickPosition = event.globalPos()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
如果我尝试执行此代码,则会收到标题中显示的错误。
如果我用这些替换最后几行,它会正常工作,但它不会像我想要的那样运行,因为我的更改存储在类中。
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
path_ui = os.path.join(os.path.dirname(__file__), "window.ui")
window = uic.loadUi(path_ui)
window.browser.load(QtCore.QUrl("https://google.com/"))
window.show()
sys.exit(app.exec_())
我的目标是能够直接从我正在使用的类中嵌入浏览器实例,而不是在 if 语句中进行。
【问题讨论】:
-
你为什么同时使用 PyQt 和 PySide?即使他们做几乎相同的事情,这些绑定也不应该永远一起使用。您可以使用 PyQt 或 PySide。
-
@musicamante 那我应该用什么来达到我的目标?说到 PyQt,我真的很陌生,我还在学习它。
-
如前所述,您使用 PyQt 或 PySide。它们几乎相同(除了许可证问题,还有一些通常仅对高级使用很重要的细微差别)。如果要使用 PySide2,请删除与 PyQt5 相关的导入,否则将任何 PySide2 导入更改为 PyQt5。要记住的重要一点是,您还需要使用正确的 uic 工具从 ui 文件构建 python 代码:对于 PySide,它是 pyside2-uic,对于 PyQt5,它是 pyuic。
-
@dharmey 在您的情况下,最简单的选择是将 PySide2 更改为 PyQt5,因为您使用 uic。