-2

我有一个 python 问题,可能很简单,但我不知道该怎么做。基本上我想运行:

value = myUiClass().getValue()

如果我运行以下命令,它将直接返回 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

任何想法 ?

谢谢

4

1 回答 1

0

所以在深入研究之后。使用 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
于 2017-11-03T05:16:10.433 回答