【问题标题】:How to get value from QDialog using multiple class如何使用多个类从 QDialog 获取价值
【发布时间】:2018-11-06 19:00:08
【问题描述】:

我目前正在 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)

非常感谢,

【问题讨论】:

    标签: python pyside qdialog


    【解决方案1】:

    首先,您不要在其他类中创建类,这被认为是一种不好的做法。另一方面,由于没有人收到它,所以没有使用返回插槽的内容,因此返回 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())
    

    【讨论】:

    • 太棒了!这正是我想要的。非常感谢你 !我会在课堂上记住这一点。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2018-01-24
    • 2020-06-13
    • 2016-04-14
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多