如何将自定义工具栏小部件添加到子窗体

2024-09-28 02:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个工具栏小部件,我希望它包含在所有数据表单中 由于QTDesigner不允许在designer中使用自定义小部件,所以我想在代码中添加它 上述数据表单将添加到主表单的MDI区域中 努力理解PyQT的工作原理

data_toolbar.py的代码如下

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_FormToolBar(object):

    def __init__(self, toolbar_type, button_type):
        super().__init__()
        self.toolbar_type = toolbar_type
        self.toolbar_type = self.toolbar_type.lower()
        self.button_type = button_type
        self.button_type = self.button_type.lower()
        self.next_left = 0
        if (self.button_type == "" or self.button_type == "n"):
            self.buttonheight = 41
            self.buttonwidht = 60

        if (self.button_type == "i"):
            self.buttonheight = 29
            self.buttonwidht = 30

    def setupUi(self, FormToolBar):
        _translate = QtCore.QCoreApplication.translate
        try:
            FormToolBar.setObjectName("FormToolBar")
        except Exception as e:
            print(e)
        FormToolBar.resize(730, 55)
        self.frame = QtWidgets.QFrame(FormToolBar)
        self.frame.setGeometry(QtCore.QRect(0, 0, 721, 51))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        FormToolBar.setWindowTitle(_translate("FormToolBar", "Form"))

        self.nextleft = 0
        if (
                self.toolbar_type == 'data' or self.toolbar_type == 'data_print' or self.toolbar_type == 'data_nav' or self.toolbar_type == 'data_nav_print'):
            self.btn_New = QtWidgets.QToolButton(self.frame)
            self.btn_New.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon3 = QtGui.QIcon()
            icon3.addPixmap(QtGui.QPixmap("D:/tools9/NEW.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_New.setIcon(icon3)
            if (self.button_type != "i"):
                self.btn_New.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_New.setObjectName("btn_New")
            self.btn_New.setText(_translate("FormToolBar", "New"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Find = QtWidgets.QToolButton(self.frame)
            self.btn_Find.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("D:/tools9/find.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Find.setIcon(icon)
            if (self.button_type != "i"):
                self.btn_Find.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Find.setObjectName("btn_Find")
            self.btn_Find.setText(_translate("FormToolBar", "Find"))
            self.nextleft = self.nextleft + self.buttonwidht + 2

        if (self.toolbar_type == 'data' or self.toolbar_type == 'data_print') != True:
            self.btn_First = QtWidgets.QToolButton(self.frame)
            self.btn_First.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon4 = QtGui.QIcon()
            icon4.addPixmap(QtGui.QPixmap("D:/tools9/Ffc/Graphics/TOP.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_First.setIcon(icon4)
            if (self.button_type != "i"):
                self.btn_First.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_First.setObjectName("btn_First")
            self.btn_First.setText(_translate("FormToolBar", "First"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Prev = QtWidgets.QToolButton(self.frame)
            self.btn_Prev.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon7 = QtGui.QIcon()
            icon7.addPixmap(QtGui.QPixmap("D:/tools9/Ffc/Graphics/PREVIOUS.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Prev.setIcon(icon7)
            if (self.button_type != "i"):
                self.btn_Prev.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Prev.setObjectName("btn_Prev")
            self.btn_Prev.setText(_translate("FormToolBar", "Previous"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Next = QtWidgets.QToolButton(self.frame)
            self.btn_Next.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon5 = QtGui.QIcon()
            icon5.addPixmap(QtGui.QPixmap("D:/tools9/Ffc/Graphics/next.bmp"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Next.setIcon(icon5)
            if (self.button_type != "i"):
                self.btn_Next.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Next.setObjectName("btn_Next")
            self.btn_Next.setText(_translate("FormToolBar", "Next"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Last = QtWidgets.QToolButton(self.frame)
            self.btn_Last.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon10 = QtGui.QIcon()
            icon10.addPixmap(QtGui.QPixmap("D:/tools9/Ffc/Graphics/BOTTOM.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Last.setIcon(icon10)
            if (self.button_type != "i"):
                self.btn_Last.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Last.setText(_translate("FormToolBar", "Last"))
            self.btn_Last.setObjectName("btn_Last")
            self.nextleft = self.nextleft + self.buttonwidht + 2

        if (
                self.toolbar_type == 'data' or self.toolbar_type == 'data_print' or self.toolbar_type == 'data_nav' or self.toolbar_type == 'data_nav_print'):
            self.btn_Modify = QtWidgets.QToolButton(self.frame)
            self.btn_Modify.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon9 = QtGui.QIcon()
            icon9.addPixmap(QtGui.QPixmap("D:/tools9/OPEN.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Modify.setIcon(icon9)
            if (self.button_type != "i"):
                self.btn_Modify.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Modify.setObjectName("btn_Modify")
            self.btn_Modify.setText(_translate("FormToolBar", "Modify"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Delete = QtWidgets.QToolButton(self.frame)
            self.btn_Delete.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon1 = QtGui.QIcon()
            icon1.addPixmap(QtGui.QPixmap("D:/tools9/CUT.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Delete.setIcon(icon1)
            if (self.button_type != "i"):
                self.btn_Delete.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Delete.setObjectName("btn_Delete")
            self.btn_Delete.setText(_translate("FormToolBar", "Delete"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Save = QtWidgets.QToolButton(self.frame)
            self.btn_Save.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon11 = QtGui.QIcon()
            icon11.addPixmap(QtGui.QPixmap("D:/tools9/SAVE.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Save.setIcon(icon11)
            if (self.button_type != "i"):
                self.btn_Save.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Save.setObjectName("btn_Save")
            self.btn_Save.setText(_translate("FormToolBar", "Save"))
            self.nextleft = self.nextleft + self.buttonwidht

            self.btn_Cancel = QtWidgets.QToolButton(self.frame)
            self.btn_Cancel.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon8 = QtGui.QIcon()
            icon8.addPixmap(QtGui.QPixmap("D:/tools9/UNDO.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Cancel.setIcon(icon8)
            if (self.button_type != "i"):
                self.btn_Cancel.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Cancel.setObjectName("btn_Cancel")
            self.btn_Cancel.setText(_translate("FormToolBar", "Cancel"))
            self.nextleft = self.nextleft + self.buttonwidht

        if (
                self.toolbar_type == 'data_print' or self.toolbar_type == 'data_nav_print' or self.toolbar_type == 'nav_print'):
            self.btn_Print = QtWidgets.QToolButton(self.frame)
            self.btn_Print.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
            icon6 = QtGui.QIcon()
            icon6.addPixmap(QtGui.QPixmap("D:/tools9/PRINT.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.btn_Print.setIcon(icon6)
            if (self.button_type != "i"):
                self.btn_Print.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.btn_Print.setObjectName("btn_Print")
            self.btn_Print.setText(_translate("FormToolBar", "Print"))
            self.nextleft = self.nextleft + self.buttonwidht

        self.btn_Exit = QtWidgets.QToolButton(self.frame)
        self.btn_Exit.setGeometry(QtCore.QRect(self.nextleft, 0, self.buttonwidht, self.buttonheight))
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("D:/tools9/CLOSE.BMP"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.btn_Exit.setIcon(icon2)
        if (self.button_type != "i"):
            self.btn_Exit.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        self.btn_Exit.setObjectName("btn_Exit")
        self.btn_Exit.setText(_translate("FormToolBar", "Exit"))
        self.nextleft = self.nextleft + self.buttonwidht

        QtCore.QMetaObject.connectSlotsByName(FormToolBar)
        FormToolBar.setTabOrder(self.btn_New, self.btn_Find)
        if (self.toolbar_type == 'data' or self.toolbar_type == 'data_print') != True:
            FormToolBar.setTabOrder(self.btn_Find, self.btn_First)
            FormToolBar.setTabOrder(self.btn_First, self.btn_Prev)
            FormToolBar.setTabOrder(self.btn_Prev, self.btn_Next)
            FormToolBar.setTabOrder(self.btn_Next, self.btn_Last)
            FormToolBar.setTabOrder(self.btn_Last, self.btn_Modify)

        if (self.toolbar_type == 'data' or self.toolbar_type == 'data_print'):
            FormToolBar.setTabOrder(self.btn_Find, self.btn_Modify)
            FormToolBar.setTabOrder(self.btn_Modify, self.btn_Delete)
            FormToolBar.setTabOrder(self.btn_Delete, self.btn_Save)
            FormToolBar.setTabOrder(self.btn_Save, self.btn_Cancel)
        else:
            FormToolBar.setTabOrder(self.btn_Last, self.btn_Modify)
            FormToolBar.setTabOrder(self.btn_Modify, self.btn_Delete)
            FormToolBar.setTabOrder(self.btn_Delete, self.btn_Save)
            FormToolBar.setTabOrder(self.btn_Save, self.btn_Cancel)
        if (
                self.toolbar_type == 'data_print' or self.toolbar_type == 'data_nav_print' or self.toolbar_type == 'nav_print'):
            FormToolBar.setTabOrder(self.btn_Cancel, self.btn_Print)
            FormToolBar.setTabOrder(self.btn_Print, self.btn_Exit)
        else:
            FormToolBar.setTabOrder(self.btn_Cancel, self.btn_Exit)
        FormToolBar.resize(self.nextleft + 10, 55)
        self.frame.setGeometry(QtCore.QRect(0, 0, self.nextleft + 8, 54))

    def reconfig(self, parent):
        self.po = parent
        parentwidth = parent.frameGeometry().width()
        parentheight = parent.frameGeometry().height()
        mywidth = self.frame.frameGeometry().width()
        myheight = self.frame.frameGeometry().height()
        width = ((parentwidth / 2) - (mywidth / 2))
        height = parentheight - (myheight + 30)
        self.frame.move(width, height)
        self.btn_Exit.clicked.connect(sys.exit)
        self.frame.update()

我想将其添加到下面的子表单代码中

from PyQt5 import QtCore, QtGui, QtWidgets
from data_toolbar import Ui_FormToolBar


class Ui_DataForm(object):
    def setupUi(self, DataForm):
        DataForm.setObjectName("DataForm")
        DataForm.resize(577, 366)
        DataForm.setStyleSheet("")
        self.label_2 = QtWidgets.QLabel(DataForm)
        self.label_2.setGeometry(QtCore.QRect(10, 79, 56, 23))
        self.label_2.setObjectName("label_2")
        self.lcdNumber = QtWidgets.QLCDNumber(DataForm)
        self.lcdNumber.setGeometry(QtCore.QRect(10, 50, 64, 23))
        self.lcdNumber.setObjectName("lcdNumber")
        self.pushButton = QtWidgets.QPushButton(DataForm)
        self.pushButton.setGeometry(QtCore.QRect(300, 192, 75, 23))
        self.pushButton.setStyleSheet("")
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(DataForm)
        self.label.setGeometry(QtCore.QRect(300, 85, 47, 16))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(DataForm)
        self.lineEdit.setGeometry(QtCore.QRect(300, 166, 133, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.comboBox = QtWidgets.QComboBox(DataForm)
        self.comboBox.setGeometry(QtCore.QRect(300, 140, 69, 20))
        self.comboBox.setObjectName("comboBox")

        self.tb = QtWidgets.QWidget()
        self.tb.setGeometry(QtCore.QRect(0, 290, 577, 80))
        self.tb.setObjectName("tb")
        ui = Ui_FormToolBar("data_print", "n")
        ui.setupUi(self.tb)
        ui.reconfig(self)
        self.tb.show()
        self.retranslateUi(DataForm)
        QtCore.QMetaObject.connectSlotsByName(DataForm)

    def retranslateUi(self, DataForm):
        _translate = QtCore.QCoreApplication.translate
        DataForm.setWindowTitle(_translate("DataForm", "DataForm"))
        self.label_2.setText(_translate("DataForm", "TextLabel"))
        self.pushButton.setText(_translate("DataForm", "PushButton"))
        self.label.setText(_translate("DataForm", "TextLabel"))

似乎什么都不起作用,任何人都可以给出一个类似的例子或链接 实现同样目标的标准方法


Tags: selfdataiftypeframetoolbarqtguibtn

热门问题