Joh*_*eil 4 python pyqt qt-designer pyqt5 uic
我需要向使用 Qt Designer 创建的表单中的图形小部件添加一些功能。
例如我通常会这样做:
class custom_gv(QGraphicsView):
def __init__(self):
super().__init__()
def zoom(self):
# custom code here
Run Code Online (Sandbox Code Playgroud)
但在本例中,图形视图是我在 Qt Designer 中创建的窗口的一部分。我知道您可以在 Qt 设计器中使用“升级到”功能,但我不知道如何在代码中使用该功能,特别是考虑到我使用此方法来使用 Qt 设计器窗口:
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)
Run Code Online (Sandbox Code Playgroud)
那么,当我使用 Qt Designer 时,我该如何自定义窗口中图形视图的代码呢?
解决此问题的最常见方法是使用小部件升级。这将允许您用您自己的自定义类替换 Qt Designer 中定义的小部件。执行此操作的步骤如下:
在 Qt Designer 中,选择QGraphicsView要替换的,然后右键单击它并选择升级到...。在对话框中,将升级类名称设置为“custom_gv”,并将头文件设置为包含此类的模块的Python 导入路径(例如“mypkg.widgets”)。然后单击“添加”和“升级”,您将在对象检查器窗格中看到类从“QGraphicsView”更改为“custom_gv”。
当Qt Designerui文件转换为PyQt代码时,它会自动添加一条导入语句,如下所示:
from mypkg.widgets import custom_gv
Run Code Online (Sandbox Code Playgroud)
然后在转换后的代码中它将替换如下内容:
self.graphicsView = QtWidgets.QGraphicsView(MainWindow)
Run Code Online (Sandbox Code Playgroud)
有了这个:
self.graphicsView = custom_gv(MainWindow)
Run Code Online (Sandbox Code Playgroud)
因此文件中的代码ui对自定义类一无所知:它只是从其他地方导入的名称。这意味着您可以完全自由地以您喜欢的任何方式编写自定义类。
在 PyQt 中,该机制的工作方式与pyuic模块相同uic。和loadUi函数loadUiType生成与 完全相同的代码pyuic。唯一的区别是该pyuic工具将生成的代码写入文件,而uic模块直接通过exec.
| 归档时间: |
|
| 查看次数: |
3330 次 |
| 最近记录: |