自定义 Qt 设计器小部件的代码?
Customising code of Qt designer widget?
我需要在使用 Qt Designer 创建的窗体中向图形小部件添加一些功能。
例如我通常会这样做:
class custom_gv(QGraphicsView):
def __init__(self):
super().__init__()
def zoom(self):
# custom code here
但在这种情况下,图形视图是我在 Qt Designer 中制作的 window 的一部分。我知道您可以在 Qt 设计器中使用 "promote to" 功能,但我不知道如何在代码中使用它,特别是考虑到我使用这种方法来使用 Qt 设计器 windows:
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 时,我将如何在 window 中自定义图形视图的代码?
最常见的解决方法是使用 widget promotion。这将允许您用自己的自定义 class 替换 Qt Designer 中定义的小部件。操作步骤如下:
在Qt Designer中,select要替换的QGraphicsView
,然后right-click它和select 提升为...。在对话框中,将 Promoted class name 设置为 "custom_gv",并将 Header file 设置为 python包含此 class 的模块的导入路径(例如 "mypkg.widgets")。然后点击添加和推广,你会看到class从"QGraphicsView"变为"custom_gv"在“对象检查器”窗格中。
当Qt Designer ui
文件转换为PyQt代码时,会自动添加这样的import语句:
from mypkg.widgets import custom_gv
然后在转换后的代码中它将替换如下内容:
self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
有了这个:
self.graphicsView = custom_gv(MainWindow)
因此 ui
文件中的代码对自定义 class 一无所知:它只是从其他地方导入的名称。这意味着您可以完全自由地以任何您喜欢的方式编写自定义 class。
在 PyQt 中,此机制在 pyuic
中的工作方式与在 uic
模块中的工作方式相同。 loadUi
和 loadUiType
函数生成与 pyuic
完全相同的代码。唯一的区别是 pyuic
工具将生成的代码写入文件,而 uic
模块直接通过 exec
.
加载它
我需要在使用 Qt Designer 创建的窗体中向图形小部件添加一些功能。
例如我通常会这样做:
class custom_gv(QGraphicsView):
def __init__(self):
super().__init__()
def zoom(self):
# custom code here
但在这种情况下,图形视图是我在 Qt Designer 中制作的 window 的一部分。我知道您可以在 Qt 设计器中使用 "promote to" 功能,但我不知道如何在代码中使用它,特别是考虑到我使用这种方法来使用 Qt 设计器 windows:
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 时,我将如何在 window 中自定义图形视图的代码?
最常见的解决方法是使用 widget promotion。这将允许您用自己的自定义 class 替换 Qt Designer 中定义的小部件。操作步骤如下:
在Qt Designer中,select要替换的QGraphicsView
,然后right-click它和select 提升为...。在对话框中,将 Promoted class name 设置为 "custom_gv",并将 Header file 设置为 python包含此 class 的模块的导入路径(例如 "mypkg.widgets")。然后点击添加和推广,你会看到class从"QGraphicsView"变为"custom_gv"在“对象检查器”窗格中。
当Qt Designer ui
文件转换为PyQt代码时,会自动添加这样的import语句:
from mypkg.widgets import custom_gv
然后在转换后的代码中它将替换如下内容:
self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
有了这个:
self.graphicsView = custom_gv(MainWindow)
因此 ui
文件中的代码对自定义 class 一无所知:它只是从其他地方导入的名称。这意味着您可以完全自由地以任何您喜欢的方式编写自定义 class。
在 PyQt 中,此机制在 pyuic
中的工作方式与在 uic
模块中的工作方式相同。 loadUi
和 loadUiType
函数生成与 pyuic
完全相同的代码。唯一的区别是 pyuic
工具将生成的代码写入文件,而 uic
模块直接通过 exec
.