如何添加下拉菜单到QMessageBox?

时间:2019-05-24 00:33:02

标签: python pyqt pyqt4

看了一些我在stackoverflow上找到的代码后,我找到了一种向QmessageBox添加表的方法。现在,我想在QmessageBox的右上角放置一个下拉菜单,但我想不出办法(即使可能的话)。

这是我编辑的代码:

from PyQt4.QtGui import *
from PyQt4.Qt import *
import sys


class MyMessageBox(QMessageBox):
    def __init__(self):
        QMessageBox.__init__(self)
        self.setSizeGripEnabled (True)

        self.setWindowTitle('Get Parent Script')
        self.setIcon(self.Question)
        #self.setText("Hello MessageBox")
        self.addButton("Select", QMessageBox.ActionRole)
        self.setStandardButtons(QMessageBox.Cancel)
        #self.addWidget(QInputDialog())

        self.addTableWidget (self)

        currentClick = self.exec_()


    def addTableWidget (self, parentItem) :
        self.l =  QVBoxLayout()
        self.tableWidget = QTableWidget(parentItem)
        self.tableWidget.setObjectName ('tableWidget')

        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(2)
        self.tableWidget.setHorizontalHeaderLabels(QString("Nuke Script;File Modification Time;User").split(";"))

        header = self.tableWidget.horizontalHeader()
        header.setResizeMode(0, QHeaderView.ResizeToContents)
        header.setResizeMode(1, QHeaderView.Stretch)
        header.setResizeMode(2, QHeaderView.Stretch)
        stringlist = {u'/SEQ/ZZ/ZZ_012_001/Comp/nuke/scripts/comp':u'user1', u'/SEQ/ZZ/ZZ_012_001/Comp/nuke/scripts/comp/hello': u'user2'}
        row = 0
        for key, value in stringlist.iteritems():
            print key, value

            nameitem = QTableWidgetItem(str(key))
            codeitem = QTableWidgetItem(str(value))
            self.tableWidget.setItem(row,0,nameitem)
            self.tableWidget.setItem(row,1,codeitem)
            row +=1

        self.tableWidget.resize(1000, 170)

        self.l.addWidget(self.tableWidget)
        self.setLayout(self.l)

    def event(self, e):
        result = QMessageBox.event(self, e)
        self.setMinimumWidth(0)
        self.setMaximumWidth(16777215)
        self.setMinimumHeight(0)
        self.setMaximumHeight(16777215)
        self.setSizePolicy(
            QSizePolicy.Expanding,
            QSizePolicy.Expanding
        )
        self.resize(1000, 300)

        return result


def run_cli():
    #app = QtWidgets.QApplication(sys.argv)
    app = QApplication(sys.argv)
    MyMessageBox()


if __name__ == '__main__':
    run_cli()

1 个答案:

答案 0 :(得分:1)

在您的情况下,使用QMessageBox并不是最佳选择,因为我涉及到不必要的工作,因为此小部件已经具有预定义的布局,而是可以基于QDialog创建小部件:

from PyQt4 import QtCore, QtGui


class Dialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)

        label = QtGui.QLabel("Text")
        combo = QtGui.QComboBox()
        combo.addItems(["option1", "option2", "option3"])

        self.tableWidget = QtGui.QTableWidget(2, 3)
        self.tableWidget.setHorizontalHeaderLabels(
            QtCore.QString("Nuke Script;File Modification Time;User").split(";")
        )

        header = self.tableWidget.horizontalHeader()
        header.setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(1, QtGui.QHeaderView.Stretch)
        header.setResizeMode(2, QtGui.QHeaderView.Stretch)

        stringlist = {
            u"/SEQ/ZZ/ZZ_012_001/Comp/nuke/scripts/comp": u"user1",
            u"/SEQ/ZZ/ZZ_012_001/Comp/nuke/scripts/comp/hello": u"user2",
        }

        for row, (key, value) in enumerate(stringlist.iteritems()):
            nameitem = QtGui.QTableWidgetItem(str(key))
            codeitem = QtGui.QTableWidgetItem(str(value))
            self.tableWidget.setItem(row, 0, nameitem)
            self.tableWidget.setItem(row, 1, codeitem)

        box = QtGui.QDialogButtonBox(
            QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel,
            centerButtons=True,
        )
        box.accepted.connect(self.accept)
        box.rejected.connect(self.reject)

        lay = QtGui.QGridLayout(self)
        lay.addWidget(label, 0, 0)
        lay.addWidget(combo, 0, 1)
        lay.addWidget(self.tableWidget, 1, 0, 1, 2)
        lay.addWidget(box, 2, 0, 1, 2)

        self.resize(640, 240)


def run_cli():
    import sys

    app = QtGui.QApplication(sys.argv)
    w = Dialog()
    w.exec_()


if __name__ == "__main__":
    run_cli()

enter image description here

相关问题