Python QPushButton.setMenu(self,QMenu菜单)使用从Qt设计器生成的代码

Python QPushButton.setMenu(self,QMenu菜单)使用从Qt设计器生成的代码,python,pyqt,pyqt5,qt-designer,Python,Pyqt,Pyqt5,Qt Designer,我正在尝试使用Qt5设计器工具创建一个弹出按钮。我在qt设计器中设计了gui,然后使用pyuic5将其转换为.py文件。但我似乎无法将使用qt designer通过拖放添加的默认按钮更改为一个弹出式按钮,单击该按钮时将提供诸如条形图、散点图和方框图等选项。我想做的是创建一个弹出按钮,该按钮将提供选项栏、散点和框,当我选择受尊重的选项时,标签将更改为加载的图像。代码如下: # Form implementation generated from reading ui file 'adcombo.

我正在尝试使用Qt5设计器工具创建一个弹出按钮。我在qt设计器中设计了gui,然后使用pyuic5将其转换为.py文件。但我似乎无法将使用qt designer通过拖放添加的默认按钮更改为一个弹出式按钮,单击该按钮时将提供诸如条形图、散点图和方框图等选项。我想做的是创建一个弹出按钮,该按钮将提供选项栏、散点和框,当我选择受尊重的选项时,标签将更改为加载的图像。代码如下:


# Form implementation generated from reading ui file 'adcombo.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QPixmap

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(6, 10, 791, 361))
        self.label.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 430, 231, 91))
        self.pushButton.setStyleSheet("color: rgb(255, 0, 0);\n"
"background-color: rgb(79, 79, 79);\n"
"font: 75 16pt \"MS Shell Dlg 2\";")
        self.pushButton.setObjectName("pushButton")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(410, 430, 301, 91))
        self.comboBox.setStyleSheet("color: rgb(255, 0, 0);\n"
"background-color: rgb(79, 79, 79);\n"
"font: 75 16pt \"MS Shell Dlg 2\";")
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.setItemText(0, "")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.comboBox.setVisible(False)
        self.comboBox.currentTextChanged.connect(self.on_combobox_changed)
        self.pushButton.clicked.connect(self.onclick)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Chart Type"))
        self.comboBox.setItemText(1, _translate("MainWindow", "Bar"))
        self.comboBox.setItemText(2, _translate("MainWindow", "Scatter"))
        self.comboBox.setItemText(3, _translate("MainWindow", "Box"))

    def onclick(self) :
        self.comboBox.setVisible(True)


    def on_combobox_changed(self) :
        if self.comboBox.currentText()=='Bar' :
            bar = QPixmap('bar.png')
            self.label.setPixmap(bar)

        if self.comboBox.currentText()=='Scatter' :
            scatter= QPixmap('scatter.png')
            self.label.setPixmap(scatter)

        if self.comboBox.currentText()=='Box' :
            box = QPixmap('box.png')
            self.label.setPixmap(box)
            #self.label.setText('Line Chart')

        if self.comboBox.currentText()=='' :
            self.label.clear()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
任何和所有的帮助都将不胜感激

谢谢

更新1 我想编辑上面的代码,使其有一个按钮,如下图所示


您必须创建一个QMenu,设置QActions并使用触发信号来知道QAction已按下

# Form implementation generated from reading ui file 'adcombo.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QPixmap

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(6, 10, 791, 361))
        self.label.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 430, 231, 91))
        self.pushButton.setStyleSheet("color: rgb(255, 0, 0);\n"
"background-color: rgb(79, 79, 79);\n"
"font: 75 16pt \"MS Shell Dlg 2\";")
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Chart Type"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.create_menu()

    def create_menu(self):
        menu = QtWidgets.QMenu(
            self.pushButton, 
            triggered=self.on_menu_triggered
        )
        for text in ("", "Bar", "Scatter", "Box"):
            menu.addAction(text)
        self.pushButton.setMenu(menu)

    @QtCore.pyqtSlot(QtWidgets.QAction)
    def on_menu_triggered(self, action):
        pixmap = QtGui.QPixmap()
        if not action.text():
            self.label.clear()
            return
        if action.text() == 'Bar':
            pixmap = QPixmap('bar.png')
        elif action.text() == 'Scatter':
            pixmap= QPixmap('scatter.png')
        elif action.text() == 'Box':
            pixmap = QPixmap('box.png')
        self.label.setPixmap(pixmap)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

我不明白你的意思,你可以给我更好的解释,也许用你得到的图像和你想要得到的图像。你在哪一部分使用setMenu()?我没有在任何地方使用setMenu(),因为我不知道如何使用它,这就是我需要帮助的地方。我用我需要的按钮的图片更新了帖子,非常感谢。对答案投了赞成票。工作完美。最后一件事,有没有好的网站可以理解pyqt gui开发并在这方面做得更好?我正在学习pyqt5,但是我没有一个完整的指南可以向我学习。我仍然不理解您添加的代码的任何部分:(