为了增加我对python的理解和可用性,我一直在从头构建一个文本编辑器。我现在要做的是允许用户更改字体的大小。我使用OptionMenu工作,但是使用它我必须在界面上有一个下拉菜单。我想要做的是以某种方式将选项菜单放在顶栏上的菜单中(使用file_menu = Menu(root))并使其看起来像一个级联。我没有我的确切代码,因为我在移动设备上,远离我的笔记本电脑,但我一直在考虑如何做到这一点,我无法理解它并且无法找到它之前的搜索。提前谢谢!
编辑:我想出了怎么做,我为没有原始代码而道歉。我的原始代码类似于我下面发布的答案,但我想让用户选择8-40范围内的字体,以便font_size.add_command(label='8', command=lambda: font_size_changer(8))
font_size.add_command(label='10', command=lambda: font_size_changer(10))
font_size.add_command(label='12', command=lambda: font_size_changer(12))
看起来很糟糕我想要多少。我最终没有做OptionMenu和IntVar(),而是像这样使用for循环:
def font_size_changer(clicked_size):
global current_font_size
current_font_size = clicked_size
text.config(font=(current_font, current_font_size, style_combo))
sizes_list = [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]
font_size = Menu(menu)
font_menu.add_cascade(label="Font Size", menu=font_size)
for x in range(0, len(sizes_list)):
font_size.add_command(label=str(sizes_list[x]), command=lambda: font_size_changer(sizes_list[x]))
答案 0 :(得分:1)
虽然您可以使用OptionMenu
执行此操作,但Tkinter实际上有一个本机Menu
对象,我们可以使用它来更清晰地使用更少的代码来实现类似的结果。
这实际上并不太棘手,请参阅下面的示例:
import tkinter as tk
class App:
def __init__(self, root):
self.root = root
self.label = tk.Label(self.root, text="Lorem Ipsum", font=("Comic Sans MS", 44))
self.menubar = tk.Menu(self.root)
self.menu = tk.Menu(self.root, tearoff=0)
self.menu.add_command(label="Small", command=lambda:self.label.config(font=("Comic Sans MS", 22)))
self.menu.add_command(label="Medium", command=lambda:self.label.config(font=("Comic Sans MS", 44)))
self.menu.add_command(label="Big", command=lambda:self.label.config(font=("Comic Sans MS", 66)))
self.menubar.add_cascade(label="Size", menu=self.menu)
self.root.config(menu=self.menubar)
self.label.pack()
root = tk.Tk()
App(root)
root.mainloop()
所以让我们打破这个。
我们创建了两个Menu
个对象menubar
和menu
。然后,我们将所有命令存储在menu
内,这会创建一个带有少量条目的加密Menu
对象。
设置每个命令以更改label
然后我们向menubar
添加一个级联项,选择预定义的menu
作为级联的Menu
对象。
root.config(menu=self.menubar
用于“绘制”窗口上的Menu
对象。
这会在屏幕顶部显示一个级联菜单,菜单中的每个选项都允许我们更改label
对象的字体大小。