- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Maya 中编写一些代码,如果这会在下面的脚本示例中造成任何困惑,我很抱歉。问题是我想制作我的自定义 PyQt 类,稍后将在我的布局中用作 Widget,但我对这件事缺乏了解,导致错误
# RuntimeError: '__init__' method of object's base class (test) not called. #
我读了一些关于该错误的主题,人们建议使用 super() 修复它。我尝试输入“super()”,然后收到此错误:
# TypeError: PySide2.QtCore.QObject isn't a direct base class of test #
有人可以帮我解决这个问题吗?
from PySide2 import QtGui, QtCore, QtWidgets
from shiboken2 import wrapInstance
import maya.OpenMaya as om
import maya.OpenMayaUI as omui
import maya.cmds as cmds
import os, functools
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class testUi():
def __init__(self):
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)
def create(self):
if cmds.window(self.window, exists=True):
cmds.deleteUI(self.window, window=True)
self.parentWindow = getMayaWindow()
self.mainWindow = QtWidgets.QMainWindow(self.parentWindow)
self.mainWindow.setObjectName(self.window)
self.mainWindow.setWindowTitle(self.title)
self.mainWidget = QtWidgets.QWidget()
self.mainWindow.setCentralWidget(self.mainWidget)
self.mainLayout = QtWidgets.QFormLayout(self.mainWidget)
testik = test(self)
self.mainLayout.addWidget(testik)
self.mainButton = QtWidgets.QPushButton()
self.mainLayout.addWidget(self.mainButton)
self.mainButton.clicked.connect(partial(self.load_selected))
class test(QtWidgets.QWidget):
def __init__(self, parent=None, maya_transform_nodes=[]):
#super(QtWidgets.QWidget, self ).__init__(parent)
qWid = QtWidgets.QWidget()
self.setMinW = qWid.setMinimumWidth(300)
self.setMinH = qWid.setMinimumHeight(300)
self.sss = qWid.setStyleSheet("border:1px solid rgb(0, 255, 0); ")
self.items = []
self.transform_move = QtGui.QTransform()
self.transform_scale = QtGui.QTransform()
self.prev_mouse_pos = QtCore.QPoint(0, 0)
self.color = QtGui.QColor(0, 255, 50, 50)
self.clicked_color = QtGui.QColor(0, 255, 50, 150)
self.right_clicked_color = QtGui.QColor(255, 0, 0, 150)
v = testUi()
v.create()
最佳答案
当您创建一个类时,您可以选择从另一个对象继承,在本例中可能是一个QDialog
,因为它是您工具的主窗口。不过,仅仅继承它是不够的,您必须调用 QDialog
的构造函数才能正确初始化,并且您可以使用 super
来做到这一点。
使用super
,您可以选择从继承自的类的对象中运行方法。它看起来像这样:super(YOUR_CLASS_NAME, INSTANCE).METHOD_TO_RUN(PARAMETERS_TO_PASS)
。因此,更具体地说,要运行您的 __init__
,它将是:super(testUi, self).__init__(parent)
,这将修复它。
这可能是一个糟糕的解释,因此请 Google super
获取更好的示例。
我对您的脚本进行了一些编辑以简化它,并在其中留下了一些评论:
from PySide2 import QtGui, QtCore, QtWidgets
from shiboken2 import wrapInstance
import maya.OpenMaya as om
import maya.OpenMayaUI as omui
import maya.cmds as cmds
import os, functools
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class testUi(QtWidgets.QDialog): # Need to inherit from a `QObject`
def __init__(self, parent=None): # It's typical to include the `parent` parameter and pass that through `super`.
# If nothing was passed for parent, default to Maya's main window.
if parent is None:
parent = getMayaWindow()
super(testUi, self).__init__(parent) # Call `super` with the class's name, testUi, and its instance, self.
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)
self.create() # Just automatically call create in the instance's constructor.
def create(self):
if cmds.window(self.window, exists=True):
cmds.deleteUI(self.window, window=True)
self.setWindowTitle(self.title)
self.resize(QtCore.QSize(*self.size))
self.testik = test(self) # Add `self.` so it belongs to this instance.
self.mainButton = QtWidgets.QPushButton()
self.mainLayout = QtWidgets.QVBoxLayout() # QVBoxLayout seems to give a better result.
self.mainLayout.addWidget(self.testik)
self.mainLayout.addWidget(self.mainButton)
self.setLayout(self.mainLayout) # Don't forget to make this widget actually set to this layout and use it.
class test(QtWidgets.QFrame):
def __init__(self, parent=None, maya_transform_nodes=[]):
super(test, self).__init__(parent) # Call `super` with the class's name, test, and its instance, self.
self.setMinimumWidth(300)
self.setMinimumHeight(300)
self.setStyleSheet("QWidget {border: 1px solid rgb(0, 255, 0)};")
self.items = []
self.transform_move = QtGui.QTransform()
self.transform_scale = QtGui.QTransform()
self.prev_mouse_pos = QtCore.QPoint(0, 0)
self.color = QtGui.QColor(0, 255, 50, 50)
self.clicked_color = QtGui.QColor(0, 255, 50, 150)
self.right_clicked_color = QtGui.QColor(255, 0, 0, 150)
v = testUi()
v.show() # Call show to show it!
我是否正确地假设您正在尝试构建概要?如果是,您可能需要查看 QGraphicsView 来用项目填充窗口并处理大部分逻辑。否则,您将必须 100% 自己完成,这可能很有趣,但也有很多额外的工作。
关于python - 如何在我的类中继承QtWidgets.QWidget并使我的类类型-QtWidgets.QWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440770/
我想使用鼠标移动 QtWidgets.QtWidget(不是 QPushButton、QLabel 等)。我在网上到处搜索,但找不到这个问题的答案。 mousePressEvent 似乎是这样,但它不
我想编译Qt例子。我收到错误 QtWidgets: No such file or directory #include greaterThan(QT_MAJOR_VERSION, 4): QT +=
我将像这样在基于小部件的应用程序中部署 qtvirtualkeyboard: #include int main(int argc, char *argv[]) { qputenv("QT_
我现在正在编写一个程序,该程序必须管理接收请求时创建的大量 QWidget,但我不知道如何在 QObject 类中创建小部件。编译器提示“QObject:无法为位于不同线程中的父对象创建子对象。” G
我创建了一个简单的 Qt 控制台应用程序(基于 Qt 提供的示例代码)。虽然这是一个控制台应用程序,但 ldd 显示了很多链接的 X11 内容。 我注意到我的 .pro 文件中有 QT += widg
我在 QPushButton 上有这个信号: void MainWindow::on_addNode_clicked() { ui->nodesTable->insertRow(ui->nod
我在 qt 应用程序中创建了一个 opengl 程序,我为此使用了这个视频教程 http://www.youtube.com/watch?v=1nzHSkY4K18 .但是我的小部件不起作用,它确实显
我正在尝试从其子组件InstrumentSelector 获取父组件的一些属性:SamplerModule。 从 InstrumentSelector 构造函数中,我运行 parent->metaOb
我的 GLWidget(继承自 QtOpenGL.QGLWidget)没有出现在屏幕上,而它应该在其他小部件的右侧可见。但是,当我从水平布局切换时: layout_final = Qtgui.QHB
我使用 PyQt5 及其所有强大的布局和小部件编写了许多代码。但不知何故,我错过了如何正确导入我的代码所需的大量模块。一切正常,我只想了解使用 PyQt5 时的最佳实践。我读到没有精确的方法,但欢迎任
我正在尝试在 Maya 中编写一些代码,如果这会在下面的脚本示例中造成任何困惑,我很抱歉。问题是我想制作我的自定义 PyQt 类,稍后将在我的布局中用作 Widget,但我对这件事缺乏了解,导致错误
我有一个 PyQt5 窗口,它将打开一个我创建的对话框窗口,该窗口只是要求用户执行某些操作,然后单击一个关闭窗口的按钮。这两个窗口是用class RenameDialog(QtWidgets.QMai
我有以下问题。我想尽可能少地浪费内存,因此每当我在它上面加载另一个 QWidget 时,都会删除一个底层 QWidget。例如。我有几个内容,我想通过点击一个按钮在它们之间切换。 所以我尝试创建一个
我正在尝试创建一个嵌入现有 QWidget 窗口内的 QQuickView 子窗口。下面的代码我创建了一个新的单独的 QQuickView 窗口而不是子窗口。 主要.cpp subWindow::su
我正在使用 qmake -project 和 qmake Prog.pro 构建我的 Qt 应用程序。 当我运行 Makefile 时出现此错误: mainwindow.h:11:21: fatal
我最近更新到了适用于 Python 的新版 Qt5。在这样做的过程中,我不得不根据已经发生的一些显着变化来修改我的代码。我想深入了解我创建的这行代码。这感觉像是解决获取 string 问题的肮脏方式。
我正在使用 Qt 阅读有关 Python 上的 Tabwidgets 的教程。我已经了解它的基础知识。我想编写一个包含多个选项卡的应用程序,每个选项卡由几个小部件组成。我在 codeloop 上找到了
我正在尝试使用 addWidget 函数将FigureCanvasQTAgg 参数作为小部件添加到某些布局中,但发生了 TypeError。仅当尝试运行使用 pyinstaller 构建的独立应用程序
有人可以向我解释一下,如果在下面的代码中我在每次调用 QApplication 构造函数之间删除 del app ,为什么会出现段错误?同样,将 QApplication 对象分配给具有不同名称的变量
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我是一名优秀的程序员,十分优秀!