如何使用多个 class 从 QDialog 获取值
How to get value from QDialog using multiple class
我目前正在 Nuke 11 的一个面板中工作,它打开了一个 QDialog,我想知道如何在我关闭 QDialog 时从它获取一个值到我的主 class 中? QDialog 在不同的 class 中。这是一个显示我的问题的简化示例:
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)
非常感谢,
首先你不要在其他 类 中创建 类,这被认为是一种不好的做法。另一方面,returns 一个槽没有被使用,因为没有人收到它,所以 returns 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())
我目前正在 Nuke 11 的一个面板中工作,它打开了一个 QDialog,我想知道如何在我关闭 QDialog 时从它获取一个值到我的主 class 中? QDialog 在不同的 class 中。这是一个显示我的问题的简化示例:
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)
非常感谢,
首先你不要在其他 类 中创建 类,这被认为是一种不好的做法。另一方面,returns 一个槽没有被使用,因为没有人收到它,所以 returns 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())