2017-08-22 73 views
-1

Pythonの理解と使いやすさを向上させるため、テキストエディタを最初から構築しています。私が今しようとしているのは、ユーザーがフォントのサイズを変更できるようにすることです。私はこれをOptionMenuを使って動作させていますが、これを使用することでインタフェース上にドロップダウンが必要です。私がやっていることは何とかオプションメニューをトップバーのメニュー(file_menu = Menu(root))に置き、それをカスケードのように見せることです。私はモバイルで、ノートパソコンから離れているので、私は正確なコードを持っていませんが、私はこれを行う方法について考えていました。私はそれを理解することができず、それを早期に見つけることができませんでした。前もって感謝します!PythonでTkinterを使用してOptionMenuをメニューとして使用

編集:私はそれを行う方法を考え出しました。私は元のコードがないことをお詫びします。私の元のコードは私の下に掲載の答えのようなものでしたが、私は、ユーザーがそう

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至るまでのフォントサイズを選択してもらいたいです。私は、(オプションメニューと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

ようこそスタックオーバーフロー。私はあなたがこの質問をしたときにあなたのコンピュータにいなかったとは思っていますが、[Minimal、Complete、and Verifiable example](https://stackoverflow.com/help/mcve)の例を提供しなければならないという事実は変わりません。これまでに行ってきたことを理解し、そのコードに基づいてフィードバックを提供することができます。 MCVEなしで、あるいは適切な文脈なしに質問するのではなく、あなたがMCVEを提供して質問をするまで待つべきです。 –

答えて

1

このTkinterの操作を行うためにOptionMenuを使用することができなくなり、実際に私たちは似て達成するために使用することができますネイティブ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オブジェクトmenubarmenuの2つを作成します。次に、すべてのコマンドをmenuの内部に格納します。これにより、いくつかのエントリを持つMenuオブジェクトが作成されます。

各コマンドは、我々はその後、カスケードのために私たちのMenu対象として事前に定義されたmenu選択menubarにカスケード項目を追加label

のフォントサイズを変更するように設定されています。

root.config(menu=self.menubarは、オブジェクトを私たちのウィンドウに「描画」するために使用されます。

この結果、画面上部にカスケードメニューが表示され、メニューの各オプションでlabelオブジェクトのフォントサイズを変更できます。

関連する問題