Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQT QPushButton.setMenu?如何让它工作?_Python_Pyqt_Pyqt4 - Fatal编程技术网

Python PyQT QPushButton.setMenu?如何让它工作?

Python PyQT QPushButton.setMenu?如何让它工作?,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我只是PyQT的初学者。 我不确定我的线程标题是否是解决我问题的正确方法 我在Qpushbutton上创建popmenu时遇到问题。 根据 我需要制作一个QPushButton.setMenu(self,QMenu菜单) 但是我真的不知道从哪里开始。。我找不到如何使用这个的样品。 请帮我制作一个。基本思想是,首先必须创建一个QMenu,然后使用setMenu方法将其附加到按钮上。如果查看QMenu,您将看到一个名为addAction的方法,它将向新创建的QMenu中添加菜单项addAction是

我只是PyQT的初学者。 我不确定我的线程标题是否是解决我问题的正确方法

我在Qpushbutton上创建popmenu时遇到问题。 根据

我需要制作一个QPushButton.setMenu(self,QMenu菜单)

但是我真的不知道从哪里开始。。我找不到如何使用这个的样品。
请帮我制作一个。

基本思想是,首先必须创建一个
QMenu
,然后使用
setMenu
方法将其附加到按钮上。如果查看
QMenu
,您将看到一个名为
addAction
的方法,它将向新创建的
QMenu
中添加菜单项
addAction
是重载的,因此有很多不同的方法来调用它。您可以使用菜单中的图标,指定键盘快捷键和其他内容。不过为了简单起见,我们只需添加一个菜单项,并在选中该项时为其提供一个调用方法

from PyQt4 import QtGui, QtCore
import sys


class Main(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        pushbutton = QtGui.QPushButton('Popup Button')
        menu = QtGui.QMenu()
        menu.addAction('This is Action 1', self.Action1)
        menu.addAction('This is Action 2', self.Action2)
        pushbutton.setMenu(menu)
        self.setCentralWidget(pushbutton)

    def Action1(self):
        print 'You selected Action 1'

    def Action2(self):
        print 'You selected Action 2'


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    app.exec_()
这里我们创建了一个按钮(创造性地命名为
按钮
)。然后,我们使用
QtGui.QMenu()
创建一个菜单(再次创造性地命名为
menu
)。通过调用
addAction
并为其提供一个将用作菜单项文本的字符串和一个方法(self.Action1或self.Action2)来创建操作,如果选择了该菜单项,将调用该方法。然后我们调用
按钮的
设置菜单
方法
,将菜单分配给它。当您运行它并选择一个项目时,您应该会看到对应于所选项目打印的文本


这是基本的想法。您可以浏览QMenu,更好地了解QMenu的功能。

嗨,Stephen,这正是我学习所需要的。非常感谢你。没有这样的例子,我很难理解。。再次感谢你的回答,斯蒂芬。我只想指出一个警告-从Qt 5.3.2开始,您需要在调用
setMenu
之前完成
菜单.addAction
s-否则弹出的菜单大小不正确(并部分显示添加的项)。另一个选项是在显示菜单之前调用
setMenu(menu())
。似乎QMenu应该保存在某个地方,因为“菜单的所有权不会转移到按钮”(来自文档)。如果不保存菜单,它对我来说就无法正常工作。