如何使用多个类从 QDialog 获取价值 [英] How to get value from QDialog using multiple class

查看:101
本文介绍了如何使用多个类从 QDialog 获取价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am currently working in a panel in Nuke 11 that opens a QDialog and I was wondering how to get a value from it into my main class when I close my QDialog ? The QDialog is in a different class. This is a simplified example that shows my problem :

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:

First of all you do not create classes within other classes, it is considered a bad practice. On the other hand what returns a slot is not used since no one receives it, so what returns getValue will be lost, what you must do is that the clicked call accept closing the QDialog and after verifying that the dialogue has been accepted you just have to call 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())

这篇关于如何使用多个类从 QDialog 获取价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆