PyQt QMenu下拉方向

时间:2012-01-06 05:54:26

标签: python qt pyqt drop-down-menu qmenu

我正在寻找一种方法来控制在QMenu中打开子菜单的方向。默认行为是向右打开,除非没有足够的屏幕空间,然后向左打开。

如果您的菜单位于屏幕的最右侧(例如:chrome的设置扳手),如果您有多个嵌套菜单,则默认行为会导致它们在从左侧打开和从左侧打开之间来回ping正确的,这是一种疯狂的用户体验。

我想要的是告诉QMenu永远打开LEFT子菜单的方法;在QMenu中肯定没有对此直接控制,但是Qt通常对特定于平台的行为有很多神奇的“应用程序”或“全局”设置。我想知道是否有人知道!

我使用ToolStripMenu在C#中完成了这个before,所以我知道有些工具包具备这种能力。

1 个答案:

答案 0 :(得分:3)

我能想到一个选择。您可以通过setLayoutDirection(QtCore.Qt.RightToLeft)设置特定菜单的方向,如果有空格,它将始终展开到左侧。

虽然,我必须说,当顶级菜单从左到右对齐时,它看起来并不漂亮,其中子菜单从右到左。至少,不在我的Windows 7上:

import sys
from PyQt4 import QtGui, QtCore

app = QtGui.QApplication(sys.argv)
main = QtGui.QMainWindow()
menubar = QtGui.QMenuBar()

menus = []
submenus = {}
for x in range(10):
    # top menus
    menu = QtGui.QMenu('Top %d' % x)
    menus.append(menu)

    # set direction
    menu.setLayoutDirection(QtCore.Qt.RightToLeft)

    # add to menubar
    menubar.addMenu(menu)

    for y in range(5):
        # a sub-menu
        submenu = QtGui.QMenu('Level 1 - %d' % y)

        # some dummy actions
        submenu.addAction('Level 2 - 1')
        submenu.addAction('Level 2 - 2')

        # keep reference
        submenus[(x,y)] = submenu
        # add to the top menu
        menu.addMenu(submenu)

main.setMenuBar(menubar)
main.show()

sys.exit(app.exec_())

enter image description here