如何确保单击QListWidget项打开QFrame中相应的小部件,并且在这些小部件中输入的数据在切换列表项之间保存
class Window(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout()
tab_widget = QTabWidget()
tab_widget.setStyleSheet('background-color:gainsboro')
tab_widget.addTab(Setup(), "setup")
vbox.addWidget(tab_widget)
self.setLayout(vbox)
class Setup(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout()
splitter = QSplitter(Qt.Horizontal)
self.list = QListWidget()
self.list.setStyleSheet("background-color:white")
QListWidgetItem("vertices", self.list)
QListWidgetItem("blocks", self.list)
self.list.itemClicked.connect(self.conv_met)
splitter.addWidget(self.list)
self.frame = QFrame()
self.frame.setFrameShape(QFrame.StyledPanel)
self.frame.setLineWidth(0.6)
splitter.addWidget(self.frame)
hbox.addWidget(splitter)
self.setLayout(hbox)
self.show()
def conv_met(self, item):
if item.text() == "vertices":
convertToMeters_layout = QHBoxLayout()
convertToMeters_lbl = QLabel("convertToMeters")
convertToMeters_val = QLineEdit("0.1")
convertToMeters_layout.addWidget(convertToMeters_lbl)
convertToMeters_layout.addWidget(convertToMeters_val)
self.frame.setLayout(convertToMeters_layout)
if item.text() == "blocks":
block_grad_layout = QGridLayout()
hexx = QComboBox(self)
hexx.addItems(["hex"])
ver_labels = QLineEdit("0 1 2 3 4 5 6 7")
block_grad_layout.addWidget(hexx, 0, 0)
block_grad_layout.addWidget(ver_labels, 0, 1)
self.frame.setLayout(block_grad_layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_win = Window()
main_win.show()
sys.exit(app.exec_())
为了保留项目的数据,可以在更改为新的当前项目之前使用^{} 存储以前输入的数据
请注意,您不应该多次使用
setLayout()
;事实上,由于这个原因,您的示例无法按预期工作,如果从shell或命令提示符运行,您可能会看到错误消息:要实现您想要的功能,解决方案是使用QStackedWidget,它的工作原理几乎类似于QTabWidget,但没有用于在“页面”之间切换的选项卡栏,因为它们只能使用^{} 或^{} 以编程方式更改
请注意,如果要存储“顶点”的数值,可能更喜欢使用QSpinBox(或QDoubleSpinBox表示浮点数)。类似地,如果只需要十六进制值,最好设置一个inputMask或添加一个validator以确保输入的值有效
相关问题 更多 >
编程相关推荐