PyQt QMenu 下拉方向
我想找到一种方法来控制QMenu中子菜单打开的方向。默认情况下,子菜单是向右打开的,只有在屏幕空间不够时,才会向左打开。
如果你的菜单在屏幕的最右边(比如:Chrome的设置图标),当你有几个嵌套的菜单时,默认的行为会导致它们在左边和右边之间来回切换,这样的用户体验真的很糟糕。
我希望能有一种方法让QMenu的子菜单总是向左打开;虽然QMenu中没有直接的控制选项,但Qt通常会有一些神奇的“应用”或“全局”设置来处理特定平台的行为。我在想有没有人知道这个!
我之前在C#中使用ToolStripMenu做过这个,所以我知道有些工具包是可以做到的。
1 个回答
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_())