如何使用多类从QDialog获取值

2024-10-02 16:29:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前在nuke11的一个面板中工作,它打开了一个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)

非常感谢


Tags: importselfinitvalueexampledefasbutton
1条回答
网友
1楼 · 发布于 2024-10-02 16:29:51

首先不要在其他类中创建类,这被认为是一种不好的做法。另一方面,由于没有人接收到返回的槽,因此不使用返回的槽,因此返回的getValue将丢失,您必须做的是,单击的调用accept关闭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())

相关问题 更多 >