python - PyQt QMenu下拉方向

标签 python qt pyqt drop-down-menu qmenu

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

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

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

我已经做到了before在 C# 中使用 ToolStripMenu,所以我知道某些工具包具有此功能。

最佳答案

我能想到一个选择。您可以通过 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

关于python - PyQt QMenu下拉方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8753973/

相关文章:

python - 使用 python 中的 writerow 附加到我的 csv

python - pandas 将个体逻辑应用于群体

python - Pandas 数据框的一个特定项目的计数

python - 尝试利用 Tkinter 的知识学习 PyQt

python - 如何使 QListWidgetItem 不是三态?

qt - 信号和槽编辑按钮被禁用 (Qt Designer 4.8)

python - 将 Pycharm Python 集成到 MySQL CE 数据库的最佳方法是什么?

c++ - 为什么 QXmlQuery 似乎在结果中添加了 `\n`? (以及如何解决?)

c++ - Qt 等效于 C# 中的 Controller 或 gui 元素的泛化

c++ - 跨平台方式获取用户友好的文件类型描述