PyQt5:当我在组合框中包含QtCore.pyqtSlot()时,为什么GUI崩溃了,但是没有它,它可以工作吗?

时间:2019-06-21 21:04:06

标签: python pyqt5 signals-slots qcombobox

我正在开发一个代码,以显示位于彼此之上的不同小部件,但仅显示一个取决于QComboBox选择。我对Qt相当陌生,因此我仍在尝试了解插槽和信号,但是我认为我们应该使用它们来传递事件?我很困惑为什么没有此标记也可以工作,但是当您取消注释以下@ QtCore.pyqtSlot()时会崩溃。

感谢帮助。

from PyQt5 import QtCore, QtWidgets
import sys


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # Window Settings
        self.x, self.y, self.w, self.h = 0, 0, 900, 600
        self.setGeometry(self.x, self.y, self.w, self.h)

        self.window = MainWindow(self)
        self.setCentralWidget(self.window)
        self.setWindowTitle("MY Gui")  # Window Title

        self.show()


class Analysis(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Analysis, self).__init__(parent)
        lay = QtWidgets.QVBoxLayout(self)
        hlay = QtWidgets.QHBoxLayout()
        lay.addLayout(hlay)
        lay.addStretch()

        analysis_label = QtWidgets.QLabel("Analysis Type")
        analysis_combo = QtWidgets.QComboBox(self)
        analysis_combo.addItem("1")
        analysis_combo.addItem("2")

        analysis_combo.activated[str].connect(self.analysis_choice)

        hlay.addWidget(analysis_label)
        hlay.addWidget(analysis_combo)
    #
    # @QtCore.pyqtSlot()
    def analysis_choice(self, text):
        if text:
            print('hi')


class MainWindow(QtWidgets.QWidget):
    def __init__(self, parent):
        super(MainWindow, self).__init__(parent)
        layout = QtWidgets.QVBoxLayout(self)

        # Initialize tabs
        tab_holder = QtWidgets.QTabWidget()  # Create tab holder
        tab_3 = Analysis()
        tab_holder.addTab(tab_3, "Analysis")
        layout.addWidget(tab_holder)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

0 个答案:

没有答案