Python 更改布局-PyQt5中的小部件
这是我第一次试用PyQt5(以前没有用Python创建GUI的经验,但我已经用Python编写了一些程序)。我的问题是单击按钮后更改窗口内容。我已经创建了我的主类:Python 更改布局-PyQt5中的小部件,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,这是我第一次试用PyQt5(以前没有用Python创建GUI的经验,但我已经用Python编写了一些程序)。我的问题是单击按钮后更改窗口内容。我已经创建了我的主类: class GUI(QMainWindow): def __init__(self): super().__init__() self.centralWidget = QStackedWidget() self.setCentralWidget(self.centralWid
class GUI(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QStackedWidget()
self.setCentralWidget(self.centralWidget)
self.psuE3631A = E3631A()
self.init_gui()
def init_gui(self):
self.initGUI = initGUI(self)
self.setWindowTitle('Control panel - E3631A')
self.centralWidget.addWidget(self.initGUI)
self.show()
def simple_gui(self):
self.simpleGUI = simpleGUI(self)
self.setWindowTitle('Control panel - E3631A')
self.centralWidget.addWidget(self.simpleGUI)
self.centralWidget.setCurrentWidget(self.simpleGUI)
self.show()
def advanced_gui(self):
pass
def close_window(self):
print_comment("Exit application")
self.close()
我正在尝试切换initGUI和simpleGUI
simpleGUI:
class simpleGUI(QWidget):
def __init__(self, parent=None):
super(simpleGUI, self).__init__(parent)
print_comment("GUI in simple mode!")
layout = QGridLayout()
btn_close = QPushButton("&Exit app", self)
btn_close.clicked.connect(self.parent().close_window)
layout.addWidget(btn_close, 0, 1)
layout.addWidget(btn_close, 1, 1)
layout.addWidget(btn_close, 2, 0)
layout.addWidget(btn_close, 2, 2)
self.setLayout(layout)
class initGUI(QWidget):
def __init__(self, parent=None):
super(initGUI, self).__init__(parent)
self.psuE3631A = self.parent().psuE3631A
print_comment("GUI initialize mode!")
layout = QGridLayout()
self.ComboBoxPorts = QComboBox(self)
self.ComboBoxPorts.setToolTip("Select port to connect with device - only psu E3631A will be connected!")
self.init_comboBoxPorts()
self.scan_ports()
lbl_version = QLabel("ver " + VERSION)
lbl_version.setAlignment(Qt.AlignRight)
btn_refresh = QPushButton("&Refresh ports", self)
btn_refresh.clicked.connect(self.refresh_port_list)
self.btn_connect = QPushButton("&Connect", self)
self.btn_connect.clicked.connect(self.connect_to_device)
btn_close = QPushButton("&Exit app", self)
btn_close.clicked.connect(self.parent().close_window)
if USER is "ADVANCED":
cb_preselect = QCheckBox("Preselect")
cb_preselect.stateChanged.connect(self.check_preselect)
layout.addWidget(cb_preselect, 3, 0)
layout.addWidget(lbl_version, 1, 2)
layout.addWidget(self.ComboBoxPorts, 2, 0)
layout.addWidget(btn_refresh, 2, 1)
layout.addWidget(self.btn_connect, 2, 2)
layout.addWidget(btn_close, 3, 2)
self.setLayout(layout)
initGUI:
class simpleGUI(QWidget):
def __init__(self, parent=None):
super(simpleGUI, self).__init__(parent)
print_comment("GUI in simple mode!")
layout = QGridLayout()
btn_close = QPushButton("&Exit app", self)
btn_close.clicked.connect(self.parent().close_window)
layout.addWidget(btn_close, 0, 1)
layout.addWidget(btn_close, 1, 1)
layout.addWidget(btn_close, 2, 0)
layout.addWidget(btn_close, 2, 2)
self.setLayout(layout)
class initGUI(QWidget):
def __init__(self, parent=None):
super(initGUI, self).__init__(parent)
self.psuE3631A = self.parent().psuE3631A
print_comment("GUI initialize mode!")
layout = QGridLayout()
self.ComboBoxPorts = QComboBox(self)
self.ComboBoxPorts.setToolTip("Select port to connect with device - only psu E3631A will be connected!")
self.init_comboBoxPorts()
self.scan_ports()
lbl_version = QLabel("ver " + VERSION)
lbl_version.setAlignment(Qt.AlignRight)
btn_refresh = QPushButton("&Refresh ports", self)
btn_refresh.clicked.connect(self.refresh_port_list)
self.btn_connect = QPushButton("&Connect", self)
self.btn_connect.clicked.connect(self.connect_to_device)
btn_close = QPushButton("&Exit app", self)
btn_close.clicked.connect(self.parent().close_window)
if USER is "ADVANCED":
cb_preselect = QCheckBox("Preselect")
cb_preselect.stateChanged.connect(self.check_preselect)
layout.addWidget(cb_preselect, 3, 0)
layout.addWidget(lbl_version, 1, 2)
layout.addWidget(self.ComboBoxPorts, 2, 0)
layout.addWidget(btn_refresh, 2, 1)
layout.addWidget(self.btn_connect, 2, 2)
layout.addWidget(btn_close, 3, 2)
self.setLayout(layout)
我不确定上面的代码格式是否正确,因此这里有一个直接链接到我的(还有其余的函数和文件)
这就是我得到的:
我做错了什么,在simpleGUI中,只有一个按钮,但它没有处于正确的位置?我是否正确使用了
QStackedWidget()
?我想这是我的问题,但经过多次尝试,我不知道如何解决这个问题 您的代码示例中的缩进不正确。我认为它们是正确的,但我无法在stackoverflow上正确格式化-对此表示抱歉。这个代码正在运行,为什么你不能呢?缩进是python的关键。我们只能看我们所看到的。在simpleGUI中,您所做的错误是使用同一对象多次调用addWidget
函数btn\u close
。Qt只考虑您的第一次呼叫,忽略所有后续呼叫(因此按钮位于位置0,1
)。如果希望GUI中有多个按钮,则需要多个QPushButton
类的实例。未正确使用QStackedWidget
。在GUI中添加所需的所有小部件。然后只调用init\u gui
和simple\u gui
函数中的setCurrentIndex
或setCurrentWidget
。代码示例中的缩进不正确。我认为它们是正确的,但我无法在stackoverflow上正确格式化它-对此表示抱歉。这个代码正在运行,为什么你不能呢?缩进是python的关键。我们只能看我们所看到的。在simpleGUI中,您所做的错误是使用同一对象多次调用addWidget
函数btn\u close
。Qt只考虑您的第一次呼叫,忽略所有后续呼叫(因此按钮位于位置0,1
)。如果希望GUI中有多个按钮,则需要多个QPushButton
类的实例。未正确使用QStackedWidget
。在GUI中添加所需的所有小部件。然后只调用init_gui
和simple_gui
函数中的setCurrentIndex
或setCurrentWidget
。