简体   繁体   English

如何通过按Pyqt5或PyQt4中的工具栏上的按钮来设置表单的显示

[英]how to set the display of the form by pressing the button from the toolbar in Pyqt5 or PyQt4

For example When I open the app to show me one form, when I click the button show second form that will contain the data entry fields 例如,当我打开应用程序以显示一个表单时,单击按钮显示第二个表单,该表单将包含数据输入字段

Home

Second form 第二种形式

There are several ways to achieve what you want. 有几种方法可以实现您想要的。 Easiest (not cleanest) is to group the widgets in your "forms" into containers (QFrame, QGroupbox, etc) and connect the triggered signal from your actions into suitable slots that hide/show these containers. 最简单(不是最简单)的方法是将“表单”中的小部件分组到容器(QFrame,QGroupbox等)中,并将触发信号从您的操作连接到合适的插槽中,以隐藏/显示这些容器。 Below you can see an example (PySide) of this, on which I'm using two QFrames in order to separate your "forms". 在下面,您可以看到一个示例(PySide),在此示例中,我正在使用两个QFrame来分隔“表单”。 The layout behaviour can be modified easily. 布局行为可以轻松修改。

The form file (compiled from the designer's ui file): 表单文件(从设计者的ui文件编译):

# Form implementation generated from reading ui file 'example.ui'
#
# Created: Tue Apr 10 13:18:07 2018
#      by: pyside-uic 0.2.15 running on PySide 1.2.4
#
# WARNING! All changes made in this file will be lost!

from PySide import QtCore, QtGui

class Ui_Example(object):
    def setupUi(self, Example):
        Example.setObjectName("Example")
        Example.resize(800, 770)
        self.centralwidget = QtGui.QWidget(Example)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.fr_one = QtGui.QFrame(self.centralwidget)
        self.fr_one.setFrameShape(QtGui.QFrame.StyledPanel)
        self.fr_one.setFrameShadow(QtGui.QFrame.Raised)
        self.fr_one.setObjectName("fr_one")
        self.verticalLayout_2 = QtGui.QVBoxLayout(self.fr_one)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.bt_quit = QtGui.QPushButton(self.fr_one)
        self.bt_quit.setObjectName("bt_quit")
        self.verticalLayout_2.addWidget(self.bt_quit)
        self.cb_selection = QtGui.QComboBox(self.fr_one)
        self.cb_selection.setObjectName("cb_selection")
        self.verticalLayout_2.addWidget(self.cb_selection)
        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_2.addItem(spacerItem)
        self.gridLayout.addWidget(self.fr_one, 0, 0, 1, 1)
        self.fr_two = QtGui.QFrame(self.centralwidget)
        self.fr_two.setFrameShape(QtGui.QFrame.StyledPanel)
        self.fr_two.setFrameShadow(QtGui.QFrame.Raised)
        self.fr_two.setObjectName("fr_two")
        self.verticalLayout_5 = QtGui.QVBoxLayout(self.fr_two)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtGui.QLabel(self.fr_two)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        self.le_fname = QtGui.QLineEdit(self.fr_two)
        self.le_fname.setObjectName("le_fname")
        self.verticalLayout.addWidget(self.le_fname)
        self.verticalLayout_5.addLayout(self.verticalLayout)
        self.verticalLayout_3 = QtGui.QVBoxLayout()
        self.verticalLayout_3.setSpacing(0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label_2 = QtGui.QLabel(self.fr_two)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_3.addWidget(self.label_2)
        self.le_sname = QtGui.QLineEdit(self.fr_two)
        self.le_sname.setObjectName("le_sname")
        self.verticalLayout_3.addWidget(self.le_sname)
        self.verticalLayout_5.addLayout(self.verticalLayout_3)
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setSpacing(0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.label_3 = QtGui.QLabel(self.fr_two)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_4.addWidget(self.label_3)
        self.le_address = QtGui.QLineEdit(self.fr_two)
        self.le_address.setObjectName("le_address")
        self.verticalLayout_4.addWidget(self.le_address)
        self.verticalLayout_5.addLayout(self.verticalLayout_4)
        spacerItem1 = QtGui.QSpacerItem(20, 267, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_5.addItem(spacerItem1)
        self.gridLayout.addWidget(self.fr_two, 0, 1, 1, 1)
        Example.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(Example)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 47))
        self.menubar.setObjectName("menubar")
        Example.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(Example)
        self.statusbar.setObjectName("statusbar")
        Example.setStatusBar(self.statusbar)
        self.toolBar = QtGui.QToolBar(Example)
        self.toolBar.setObjectName("toolBar")
        Example.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.actionAction1 = QtGui.QAction(Example)
        self.actionAction1.setObjectName("actionAction1")
        self.actionAction2 = QtGui.QAction(Example)
        self.actionAction2.setObjectName("actionAction2")
        self.toolBar.addAction(self.actionAction1)
        self.toolBar.addAction(self.actionAction2)

        self.retranslateUi(Example)
        QtCore.QMetaObject.connectSlotsByName(Example)

    def retranslateUi(self, Example):
        Example.setWindowTitle(QtGui.QApplication.translate("Example", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.bt_quit.setText(QtGui.QApplication.translate("Example", "Quit", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("Example", "First name", None, QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("Example", "Second name", None, QtGui.QApplication.UnicodeUTF8))
        self.label_3.setText(QtGui.QApplication.translate("Example", "Address", None, QtGui.QApplication.UnicodeUTF8))
        self.toolBar.setWindowTitle(QtGui.QApplication.translate("Example", "toolBar", None, QtGui.QApplication.UnicodeUTF8))
        self.actionAction1.setText(QtGui.QApplication.translate("Example", "action1", None, QtGui.QApplication.UnicodeUTF8))
        self.actionAction2.setText(QtGui.QApplication.translate("Example", "action2", None, QtGui.QApplication.UnicodeUTF8))

The main file: 主文件:

from PySide import QtGui, QtCore
from _example import Ui_Example

class Example(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(Example, self).__init__(parent)
        self.ui = Ui_Example()
        self.ui.setupUi(self)

        self.ui.fr_two.setVisible(False)
        self.ui.cb_selection.addItem("motif")

        # here are the connections of the corresponding actions on the QToolBar
        self.ui.actionAction1.triggered.connect(self._changeView1)
        self.ui.actionAction2.triggered.connect(self._changeView2)

    def _changeView1(self):
        # fr_one is the first frame (the one that contains the 'quit' button and the QCombobox)
        # fr_two is the second frame (the one that contains the QLineEdits)
        self.ui.fr_one.setVisible(True)
        self.ui.fr_two.setVisible(False)

    def _changeView2(self):
        self.ui.fr_one.setVisible(False)
        self.ui.fr_two.setVisible(True)



if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM