2017-08-22 172 views
-1

爲了增加我對python的理解和可用性,我一直在構建一個文本編輯器。我現在想要做的是允許用戶更改字體的大小。我有這個工作使用OptionMenu,但通過使用,我必須有一個下拉界面。我試圖做的是以某種方式將選項菜單放到頂部欄上的菜單(使用file_menu = Menu(root)),並使其看起來像一個級聯。我沒有準確的代碼,因爲我在移動設備上,遠離筆記本電腦,但我一直在考慮如何做到這一點,但我無法弄清楚,並且無法在早期找到它。提前致謝!使用OptionMenu作爲使用Tkinter的Python中的菜單

編輯:我想通了如何做到這一點,我對沒有我的原始代碼表示歉意。我原來的代碼是像下面貼我的答案,但我想,讓用戶選擇所以有

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)) 

只是看着不好我多少想字體大小從8-40。我最終沒有做OptionMenu和IntVar()和一個去了循環,像這樣:

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

歡迎來到堆棧溢出。當你問這個問題時,我明白你不在你的計算機上,但是這並不改變你應該提供一個[最小,完整和可驗證的例子](https://stackoverflow.com/help/mcve)例子的事實,所以我們可以理解你到目前爲止做了什麼,並根據該代碼提供反饋。不要在沒有MCVE或沒有正確的上下文的情況下提出問題,而應該等到你可以提供MCVE並問你的問題。 –

回答

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() 

讓我們打破下來。

我們創建了兩個對象menubarmenu。然後,我們將所有命令存儲在menu之內,這會創建一個充滿Menu對象的對象,並在其中包含幾個條目。

每一個命令是設置改變label

字體大小,然後我們級聯項添加到menubar選擇預定義的menu作爲我們Menu對象級聯。

root.config(menu=self.menubar然後用於在我們的窗口上「繪製」Menu對象。

這會導致屏幕頂部的級聯菜單,其中菜單中的每個選項都允許我們更改label對象的字體大小。

相關問題