【问题标题】:Returning value from QObject's method that uses signals从使用信号的 QObject 方法返回值
【发布时间】:2013-12-23 17:10:46
【问题描述】:

如果函数使用信号,我不知道如何从函数返回值。这是一些代码:

class MyWindow(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super(MyWindow, self).__init__(*args, **kwargs)
        self.txt_input = QtWidgets.QLineEdit()
        self.btn_submit = QtWidgets.QPushButton('&Отправить')
        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.txt_input)
        self.vbox.addWidget(self.btn_submit)
        self.setLayout(self.vbox)

class MyClass(QtCore.QObject):
    validated = QtCore.pyqtSignal()

    def __init__(self, window, *args, **kwargs)
        self.window = window
        self.arg = None

    def get_value(arg):
        self.arg = arg
        if arg == 0:
            self.window.btn_submit.connect(check_value)
            self.window.show()

    def check_value():
        self.window.hide()
        if window.txt_input.text == 'banana':
            self.validated.emit()
if __name__ == "__main__":
    window = MyWindow()
    my_obj = MyClass(window)
    result = my_obj.get_value(0)

当然,get_value() 调用将返回 None。我想知道如何同步此代码,以便在函数get_value() 中等待信号,然后返回一些内容。

【问题讨论】:

  • 您显示的是在窗口中还是应该作为小部件嵌入到父窗口中?也许您可以将窗口显示为对话框。
  • 应用程序应该只从控制台运行。当我需要用户输入时,MyWindow 应该会弹出。
  • 好吧,我认为你应该将你的窗口显示为一个对话框,当你这样做时,程序流程会停止,直到窗口关闭,然后你可以收集值。
  • 好主意。稍后我会尝试并回复。谢谢。

标签: python qt pyqt pyqt5


【解决方案1】:

您可以使用QDialog,例如:

class MyWindow(QtWidgets.QDialog):
    def __init__(self, *args, **kwargs):
        super(MyWindow, self).__init__(*args, **kwargs)
        self.txt_input = QtWidgets.QLineEdit()
        self.btn_submit = QtWidgets.QPushButton('&Отправить')
        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addWidget(self.txt_input)
        self.vbox.addWidget(self.btn_submit)
        self.setLayout(self.vbox)  

然后调用它:

def get_value(arg):
    self.arg = arg
    if arg == 0:
        self.window.btn_submit.connect(check_value)
        self.window.exec_()

然后收集您需要的数据。

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多