2017-08-22 7 views
-1

Pour améliorer ma compréhension et ma facilité d'utilisation de Python, j'ai construit un éditeur de texte à partir de zéro. Ce que j'essaye de faire maintenant est de permettre à l'utilisateur de changer la taille de la police. J'ai ce travail en utilisant un OptionMenu mais en utilisant cela, je dois avoir une liste déroulante sur l'interface. Ce que j'essaie de faire est en quelque sorte de mettre le menu d'options dans un menu sur la barre du haut (avec file_menu = Menu (root)) et de le faire ressembler à une cascade. Je n'ai pas mon code exact car je suis sur un portable et loin de mon ordinateur portable, mais j'ai réfléchi à la façon de le faire et je n'arrive pas à le comprendre. Et je n'ai pas pu le trouver plus tôt. Merci d'avance!Utiliser OptionMenu comme un menu en Python en utilisant Tkinter

EDIT: J'ai compris comment faire, et je m'excuse de ne pas avoir mon code original. Mon code d'origine était quelque chose comme la réponse ci-dessous posté moi, mais je voulais permettre à l'utilisateur de sélectionner les tailles de police allant 8-40 afin d'avoir

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

Juste regardé mauvais pour combien je voulais. J'ai fini par ne pas faire la OptionMenu et IntVar() et je suis allé avec une boucle comme ceci:

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

Bienvenue dans le débordement de la pile. Je comprends que vous n'étiez pas sur votre ordinateur lorsque vous avez posé cette question mais cela ne change pas le fait que vous devriez fournir un exemple [Exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) afin que nous puissions peut comprendre ce que vous avez fait jusqu'à présent et fournir des commentaires en fonction de ce code. Au lieu de poser une question sans le MCVE ou sans le contexte approprié, vous devriez plutôt attendre que vous puissiez fournir le MCVE et poser votre question ensuite. –

Répondre

1

Alors que vous pouvez utiliser une OptionMenu pour ce faire Tkinter a en fait un objet Menu native que l'on pourrait utiliser pour atteindre la même résultats beaucoup plus proprement et avec moins de code.

Ceci est en fait pas trop difficile à retirer, voir ci-dessous pour un exemple:

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

Donc, nous allons décomposer. Nous créons deux objets Menumenubar et menu. Nous stockons ensuite toutes les commandes à l'intérieur de menu, ce qui crée un objet Menu avec quelques entrées.

Chaque commande est configuré pour modifier la taille de la police de label

Nous ajoutons un élément en cascade à menubar sélectionner le menu prédéfini comme objet Menu pour la cascade.

root.config(menu=self.menubar est ensuite utilisé pour "dessiner" l'objet Menu sur notre fenêtre. Il en résulte un menu en cascade en haut de l'écran où chaque option du menu nous permet de changer la taille de la police d'un objet label.