如何使用多个类从 QDialog 获取值

2024-04-15

我目前正在 Nuke 11 的一个面板中工作,该面板打开一个 QDialog ,我想知道当我关闭 QDialog 时如何从它获取一个值到我的主类中? QDialog 属于不同的类。这是一个显示我的问题的简化示例:

import nuke
from nukescripts import panels
try:
  ## < Nuke11
    import PySide.QtGui as QtGui
    import PySide.QtCore as QtCore

except:
  ## >= Nuke11
    import PySide2.QtCore as QtCore
    import PySide2.QtGui as QtGui
    import PySide2.QtWidgets as QtGui
    from PySide2.QtWidgets import QWidget as QWidget

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example,self).__init__()
        layout = QtGui.QVBoxLayout()

        button = QtGui.QPushButton('Get Value')
        button.clicked.connect(self.someFunction)

        layout.addWidget(button)
        self.setLayout(layout)

    def someFunction(self):
        value = self.GetValueLineEdit()
        if value :
            # do something

    def GetValueLineEdit(self):
        class getValuePanel(QtGui.QDialog):
            def __init__(self):
                super(getValuePanel, self).__init__()
                layout = QtGui.QHBoxLayout()

                self.lineEdit = QtGui.QLineEdit('')

                getValueButton = QtGui.QPushButton('Get Value')
                getValueButton.clicked.connect(self.getValue)

                layout.addWidget(self.lineEdit)
                layout.addWidget(getValueButton)
                self.setLayout(layout)

            def getValue(self):
                value = str(self.lineEdit.text())
                getValuePanel.accept() #To Close the QDialog
                return value

        getValuePanel = getValuePanel()
        getValuePanel.show()

pane = nuke.getPaneFor("Example.panel")
panels.registerWidgetAsPanel('Example', 'Example',"", True).addToPane(pane)

多谢,


首先,不要在其他类中创建类,这被认为是一种不好的做法。另一方面,返回插槽的内容不会被使用,因为没有人收到它,因此返回 getValue 的内容将丢失,您必须做的是单击的调用接受关闭 QDialog,并在验证对话已被接受后,您只需调用 getValue:

class ValuePanel(QtGui.QDialog):
    def __init__(self):
        super(ValuePanel, self).__init__()
        self.lineEdit = QtGui.QLineEdit()
        getValueButton = QtGui.QPushButton('Get Value')
        getValueButton.clicked.connect(self.accept)

        layout = QtGui.QHBoxLayout(self)
        layout.addWidget(self.lineEdit)
        layout.addWidget(getValueButton)

    def getValue(self):
        value = str(self.lineEdit.text())
        return value

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example,self).__init__()
        button = QtGui.QPushButton('Get Value')
        button.clicked.connect(self.someFunction)

        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(button)

    @QtCore.Slot()
    def someFunction(self):
        value_panel = ValuePanel()
        if value_panel.exec_() == QtGui.QDialog.Accepted:
            print(value_panel.getValue())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用多个类从 QDialog 获取值 的相关文章

随机推荐

  • Python 中的反向 DNS 查找

    如果我有一个类似 2001 4860 4860 8888 的 IP 地址 如何获得 foo ip6 arpa 格式的完全限定域名 编辑 到目前为止 两个解决方案都给了我 google public dns a google com 也许反向
  • 使用 ASP.NET MVC ViewBag 和 DropDownList 时遇到困难

    我的难点是如何使用ViewBag with DropdownListFor 在我的控制器中我有 TestModel model new TestModel ViewBag Clients model Clients ViewBag Stat
  • 使用 gem 安装 Rails,加载命令时出错:安装未定义的方法 'invoke_with_build_args`

    我正在尝试在 Debian 上安装 Rails 当运行这个命令时 gem install rails 我给出了这个错误 ERROR Loading command install LoadError cannot load such fil
  • 如何使用 Retrofit 传递数组参数?

    我想要post数据如下 user id 14545646 list 4545645 4545645 4545645 4545645 我用了以下Retrofit method interface DeleteOrder FormUrlEnco
  • 多重继承:从 void * 转换为第二个基类后出现意外结果

    我的程序需要使用 void 来在动态调用情况下传输数据或对象 以便它可以引用任意类型的数据 甚至原始类型 然而 我最近发现 在具有多个基类的类的情况下 向下转换这些 void 的过程会失败 甚至在调用这些向下转换的指针上的方法后使我的程序崩
  • 如果 SELECT 语句没有结果,则使用 CASE 返回字符串

    如果我的 SELECT 语句没有结果 是否可以使用 CASE 返回某个字符串 例子 DECLARE accountnumber AS VARCHAR 10 SET accountnumber account number to search
  • 在 Watson Assistant 中保存用户输入(字符串)

    我正在构建一个基于 IBM Watson 的聊天机器人应用程序 我需要将用户输入保存到变量中 我在网上搜索 只找到输入必须是实体系统 数字 日期 时间 位置 人员 的教程 在我的对话框中 我询问用户他的标识符 该标识符应该是字母数字字符串
  • 在 OR 上下文中使用多个 Laravel 作用域

    我有一个订阅模型 其中包含start date and end date我的 Laravel 应用程序中的属性 我创建了两个查询范围 scopeActive 和scopeFuture 分别 来查找活动订阅和未来订阅 我想知道如何在 OR 上
  • 在Win7 64位上安装Qwt

    我在网上搜索但没有找到适合我的问题的解决方案 Problem Qwt 安装失败nmake step 我做了什么 安装了Qt 5 1 适用于 Windows 64 位的 Qt 5 1 1 VS 2012 525 MB 信息 来自qt 网站 h
  • 保存后从 Django 表单获取模型 ID

    view py someForm SomeForm request POST someForm customSave request user forms py class SomeForm ModelForm class Meta mod
  • 将文本替换为带有 chrome 扩展的链接

    我正在尝试用链接替换网页上的文本 当我尝试这样做时 它只是用标签替换文本 而不是链接 例如 此代码将用以下内容替换 河流 a href http www cnn com asdf a 这是我到目前为止所拥有的 function handle
  • Python:“导入 posix”问题

    如果我导入os模块 我可以运行以下命令来推断 os py 的位置 gt gt gt import os gt gt gt print os file usr lib python2 6 os pyc 但是 当我导入时posix 它不具有 f
  • codeigniter 链接到另一个页面

    我是 codeigniter 框架的新手 我的 href 链接有问题 在我的主页中 我有一些菜单 可以转到不同的页面 例如 在正常的 php 中 如果我想进入 销售书籍 页面 那么我只需将 sellBook php 放在 href 链接中
  • 在 ASP.net 页面中嵌入 SVG

    我想将 svg 直接嵌入到我的 ASP net MVC 视图中 以便输出如下所示
  • 与 BLE 设备交互的 Android 应用程序无法在 Chromebook 上运行

    我有一个与自定义 BLE 设备交互的 Android 应用程序 此应用程序在 Android 版本 4 4 至 6 0 的设备上按预期运行 现在我想通过 Chromebook 上的 Google Playstore Chrome 的应用运行
  • Grails 编辑 Flash 删除消息

    你好 我是 Grails 的新人 我已经实现了一个删除操作 删除了收件箱中的邮件 但现在我想更改闪现消息 以在删除多条邮件时显示 2 条邮件已删除 而不是 邮件 4 已删除 邮件 5 已删除 请协助 以下是我的删除操作 def 删除 def
  • 简单的 Bash if-else

    好吧 由于某种原因我无法让它工作 if etc mysql my cfn exist then goto end else bash install sh end exit 检查不存在并运行install sh如果属实 e etc mysq
  • div 中的 contentEditable javascript 插入符位置

    我有一个contentEditable div 假设用户单击一个按钮 将 HTML 插入可编辑区域 因此 他们单击一个按钮 以下内容将添加到innerHTML of the contentEditable div div div div d
  • 使用批处理文件或 .NET 代码更改 Web.config 中的值

    我的计算机上有一个 web config 文件 我需要在文件中更改和添加很多内容 我实际上正在使用我的 SharePoint web config 文件 我可以用批处理文件来执行此操作吗 如果可以 我该怎么做 或者我如何使用 VB NET
  • 如何使用多个类从 QDialog 获取值

    我目前正在 Nuke 11 的一个面板中工作 该面板打开一个 QDialog 我想知道当我关闭 QDialog 时如何从它获取一个值到我的主类中 QDialog 属于不同的类 这是一个显示我的问题的简化示例 import nuke from