-1

シグナルを使用している場合、関数から値を返す方法がわかりません。ここにいくつかのコードがあります:

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()call は None を返します。このコードを同期する方法を知りたいので、関数get_value()でシグナルを待ってから何かを返すことができます。

4

1 に答える 1

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_()

その後、必要なデータを収集します。

于 2013-12-23T17:51:27.630 に答える