我正在开发一个代码,以显示位于彼此之上的不同小部件,但仅显示一个取决于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_())