首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt QMenu下拉方向

PyQt QMenu下拉方向
EN

Stack Overflow用户
提问于 2012-01-06 13:54:26
回答 1查看 5.1K关注 0票数 2

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

如果你在屏幕的最右边有一个菜单(例如:chrome的设置扳手),如果你有几个嵌套的菜单,默认行为会导致它们在从左侧打开和从右侧打开之间来回切换,这是一种令人抓狂的用户体验。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-06 16:52:58

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

然而,我必须说,当顶层菜单从左到右对齐时,它看起来并不漂亮,而as子菜单是从右到左的。至少在我的Windows7上没有:

代码语言:javascript
复制
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_())

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8753973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档