Python/Tkinter:级联菜单锚定在右侧而不是左侧

Posted

技术标签:

【中文标题】Python/Tkinter:级联菜单锚定在右侧而不是左侧【英文标题】:Python/Tkinter: Cascading menus anchored at the right instead of the left 【发布时间】:2015-11-12 15:48:01 【问题描述】:

以下代码会生成一个带有级联菜单的菜单栏,由于未知原因,这些菜单锚定在右侧而不是左侧。

import tkinter as tk

class Menubar(tk.Menu):
    def __init__(self, parent, *args, **kwargs):
        tk.Menu.__init__(self, parent, *args, **kwargs)

        filemenu = tk.Menu(self, tearoff=False)
        self.add_cascade(label="File",underline=0, menu=filemenu)
        filemenu.add_command(label="Exit", underline=0, command=None)

        testmenu = tk.Menu(self, tearoff=False)
        self.add_cascade(label="Test",underline=0, menu=testmenu)
        testmenu.add_command(label="First option", underline=0, command=None)


class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        menubar = Menubar(parent)
        parent.config(menu=menubar)

if __name__ == "__main__":
    root = tk.Tk()
    MainApplication(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

【问题讨论】:

它们在我看来是左对齐的。你在什么操作系统上运行这个?其他应用程序上的其他菜单是什么样的,它们也是右对齐的吗? Tk 菜单会出现在光标的左侧,如果您启动它们,它们会在屏幕的右边缘绘制。你接近边缘了吗?当我在 Windows 上测试时看起来很正常,除了在我的屏幕右侧。 【参考方案1】:

我能够解决问题。我首先只注意到我自己的应用程序中的问题,而其他人似乎正常工作。在尝试了一些其他应用程序之后,似乎问题不仅限于我自己的问题。我想我首先尝试的那些没有问题,因为他们可能使用了不同的小部件工具包。问题是由 Windows (8.1) 引起的,它自动切换了平板电脑的一些设置(我有一个半平板电脑:Lenovo Thinkpad Yoga)。

通过运行以下命令解决了问题(按 windows 键 + R 运行命令)

shell:::80F3F1D5-FECA-45F3-BC32-752C152E456E

这将带您进入“平板电脑设置”。在“其他”选项卡中,您必须确保选择“左撇子”。这会将菜单的外观更改为正常。

【讨论】:

以上是关于Python/Tkinter:级联菜单锚定在右侧而不是左侧的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Hololens 全息图锚定在物理环境中?

孙子的选择器,或如何将选择器锚定在已知元素上

UIView 元素布局约束

使用窗口大小维护Winform控件和图像比例

如何使节标题锚定到多节表格视图的顶部?

Python Tkinter:将滚动条附加到列表框而不是窗口