Python - 如何在用户交互后 return 来自 class 的值
Python - how to return a value from a class AFTER user interaction
我有一个 python 问题,可能很简单,但我不知道如何去做。
基本上我想 运行:
value = myUiClass().getValue()
如果我 运行 以下,它将直接 return None 而不是事件等待用户与 UI 交互(我还没有这里定义为UI本身不是重点)
class MyUi(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MyUi, self).__init__(parent)
self.finalValue = None
# UI that will modify self.finalValue
def getValue(self):
return self.finalValue
value = MyUi().getValue()
我想我缺少一些暂停进程的东西,直到用户与 UI ?
交互
这是我想要的例子
from PySide2 import QtWidgets
col = QtWidgets.QColorDialog.getColor()
print col
有什么想法吗?
感谢
所以在深入了解之后。使用 QDialog 更容易,因为它有一个内置的方法。
exec_() 将暂停进程,直到它从对话框中得到答案 (self.accept() 或 self.reject())
显然也可以用 QWidget 来完成,但过程有点不同,我还没有测试过。您实际上可以在 QDialog 参考中找到解释。
from PySide2 import QtWidgets
class MyDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)
self.valueToReturn = None
def mousePressEvent(self, event):
super(MyDialog, self).mousePressEvent(event)
# get the value from UI and set it here
self.valueToReturn = 5
self.accept()
@staticmethod
def launch():
dlg = MyDialog()
r = dlg.exec_()
if r:
return dlg.valueToReturn
else:
return None
value = MyDialog.launch()
print value
我有一个 python 问题,可能很简单,但我不知道如何去做。 基本上我想 运行:
value = myUiClass().getValue()
如果我 运行 以下,它将直接 return None 而不是事件等待用户与 UI 交互(我还没有这里定义为UI本身不是重点)
class MyUi(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MyUi, self).__init__(parent)
self.finalValue = None
# UI that will modify self.finalValue
def getValue(self):
return self.finalValue
value = MyUi().getValue()
我想我缺少一些暂停进程的东西,直到用户与 UI ?
交互这是我想要的例子
from PySide2 import QtWidgets
col = QtWidgets.QColorDialog.getColor()
print col
有什么想法吗?
感谢
所以在深入了解之后。使用 QDialog 更容易,因为它有一个内置的方法。
exec_() 将暂停进程,直到它从对话框中得到答案 (self.accept() 或 self.reject())
显然也可以用 QWidget 来完成,但过程有点不同,我还没有测试过。您实际上可以在 QDialog 参考中找到解释。
from PySide2 import QtWidgets
class MyDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)
self.valueToReturn = None
def mousePressEvent(self, event):
super(MyDialog, self).mousePressEvent(event)
# get the value from UI and set it here
self.valueToReturn = 5
self.accept()
@staticmethod
def launch():
dlg = MyDialog()
r = dlg.exec_()
if r:
return dlg.valueToReturn
else:
return None
value = MyDialog.launch()
print value