Python Qt设计器小部件的自定义代码?

Python Qt设计器小部件的自定义代码?,python,pyqt,pyqt5,qt-designer,uic,Python,Pyqt,Pyqt5,Qt Designer,Uic,我需要以使用Qt设计器创建的形式向图形小部件添加一些功能 例如,我通常会这样做: class custom_gv(QGraphicsView): def __init__(self): super().__init__() def zoom(self): # custom code here from mypkg.widgets import custom_gv self.graphicsView = QtWidgets.QGraph

我需要以使用Qt设计器创建的形式向图形小部件添加一些功能

例如,我通常会这样做:

class custom_gv(QGraphicsView):
    def __init__(self):
        super().__init__()

    def zoom(self):
        # custom code here
from mypkg.widgets import custom_gv
    self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
但在本例中,图形视图是我在Qt Designer中创建的窗口的一部分。我知道您可以在Qt designer中使用“升级到”功能,但我不知道如何在代码中使用该功能,特别是考虑到我使用此方法来使用Qt designer窗口:

from PyQt5.uic import loadUiType

custom_window = loadUiType('ui.ui')

class Window(QMainWindow, custom_window):
    def __init__(self):
        QMainWindow.__init__(self)
        custom_window.__init__(self)
        self.setupUi(self)

那么,当我使用Qt Designer时,如何在我的窗口中自定义图形视图的代码呢?

最常见的解决方法是使用。这将允许您用自己的自定义类替换Qt设计器中定义的小部件。执行此操作的步骤如下所示:

在Qt Designer中,选择要替换的
QGraphicsView
,然后右键单击它并选择升级到。在该对话框中,将提升的类名设置为“custom_gv”,并将头文件设置为包含该类的模块的python导入路径(例如“mypkg.widgets”)。然后单击添加和升级,您将在对象检查器窗格中看到类从“QGraphicsView”更改为“custom_gv”

当Qt设计器
ui
文件转换为PyQt代码时,它将自动添加如下导入语句:

class custom_gv(QGraphicsView):
    def __init__(self):
        super().__init__()

    def zoom(self):
        # custom code here
from mypkg.widgets import custom_gv
    self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
然后在转换后的代码中,它将替换如下内容:

class custom_gv(QGraphicsView):
    def __init__(self):
        super().__init__()

    def zoom(self):
        # custom code here
from mypkg.widgets import custom_gv
    self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
为此:

    self.graphicsView = custom_gv(MainWindow)
因此,
ui
文件中的代码对自定义类一无所知:它只是从其他地方导入的名称。这意味着您可以完全自由地以任何喜欢的方式编写自定义类


在PyQt中,这种机制与
pyuic
模块的工作方式相同。
loadUi
loadUiType
函数生成的代码与
pyuic
生成的代码完全相同。唯一的区别是
pyuic
工具将生成的代码写入文件,而
uic
模块直接通过加载它。

升级小部件是有效的。关于它,您具体不了解什么?当使用LoadUiType方法而不是convert to code first方法时,我如何在PyQt中使用它?它的工作方式完全相同。但是,我如何编辑提升的类?这可能是因为我不太明白tloadUiType是如何工作的