我正在寻找一种方法来控制子菜单在QMenu中的打开方向。默认行为是向右打开,除非没有足够的屏幕空间,然后向左打开。
如果你在屏幕的最右边有一个菜单(例如:chrome的设置扳手),如果你有几个嵌套的菜单,默认行为会导致它们在从左侧打开和从右侧打开之间来回切换,这是一种令人抓狂的用户体验。
我想要的是一种告诉QMenu总是在左边打开子菜单的方法;在QMenu中肯定没有对此的直接控制,但Qt通常有很多神奇的“应用程序”或“全局”设置来实现特定于平台的行为。我想知道有没有人知道!
我已经使用ToolStripMenu在C#中完成了这个before,所以我知道有些工具包有这个功能。
发布于 2012-01-06 16:52:58
我能想到一个选择。您可以通过setLayoutDirection(QtCore.Qt.RightToLeft)设置特定菜单的方向,如果有空间,它将始终扩展到左侧。
然而,我必须说,当顶层菜单从左到右对齐时,它看起来并不漂亮,而as子菜单是从右到左的。至少在我的Windows7上没有:
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_())

https://stackoverflow.com/questions/8753973
复制相似问题