2017-09-08 6 views
0

J'ai créé une barre de menu et une zone de texte, dans la zone de texte J'aime afficher les informations de la variable qui appartient à la chooice le menu.Comment afficher un texte spécifique dans une zone de texte par choix à partir d'une barre de menu

Mais je n'arrive pas à comprendre comment.

Voici ce que j'ai réussi à mettre en place par différents guides sur le web. Je suis très novice avec Python et je suis toujours en train de me débattre avec le concept des objets et des classes, donc toute aide sera grandement appréciée.

from tkinter import Tk, Frame, Menu 
from tkinter import * 

class Example(Frame): 
    def __init__(self): 
    super().__init__() 
    self.initUI() 

    def initUI(self): 
    self.master.title("syntax explenation for shopfloor") 

    menubar = Menu(self.master) 
    self.master.config(menu=menubar) 

    syntaxMenu = Menu(menubar, tearoff=False)  
    submenu = Menu(syntaxMenu) 
    syntaxMenu.add_cascade(label='Math', menu=submenu, underline=0) 
    submenu.add_command(label="abs()", command=self.onSyntaxabs) 
    submenu.add_command(label="cos()", command=self.onSyntaxcos) 
    submenu.add_command(label="sin()", command=self.onSyntaxsin) 
    submenu.add_cascade(label="log()", command=self.onSyntaxlog) 
    submenu = Menu(syntaxMenu) 
    syntaxMenu.add_cascade(label='Inqurie', menu=submenu, underline=0) 
    submenu.add_command(label="inqiureText()", command=self.onSyntaxinquire) 

    menubar.add_cascade(label="Syntax", underline=0, menu=syntaxMenu) 

    def onSyntaxabs(): 
    info="Convert to absolute value, abs(-10) will respond with 10." 
    def onSyntaxcos(): 
    info="Returns cosinus value in decimal degrees" 
    def onSyntaxcos(): 
    info="Returns cosinus value in decimal degrees" 
    def onSyntaxlog(): 
    info="Returns the natural logarithm" 
    def onSyntaxinquire(): 
    info="Creates a pop-up box that you can enter text in." 


def main(): 

root = Tk() 
root.geometry("500x600") 
app = Example() 
S = Scrollbar(root) 
T = Text(root, height=20, width=60, bg="lightblue") 
S.pack(side=RIGHT, fill=Y) 
T.pack(side=LEFT, fill=BOTH) 
T.pack(side=RIGHT, fill=BOTH) 
S.config(command=T.yview) 
T.config(yscrollcommand=S.set) 
info=? 
T.insert(END, info) 
mainloop() 

if __name__ == '__main__': 
main() 
+0

Il existe de nombreux problèmes avec votre code. Vous devez corriger votre indentation. Vous importez deux fois depuis tkinter sans raison. 'info =?' n'est pas une affirmation valide. J'imaginais que vous vouliez dire 'info ="? "'. Vous avez défini 'def onSyntaxcos():' deux fois et ainsi de suite. –

+0

Vous devez d'abord comprendre ce qu'est un ['class'] (https://docs.python.org/3/tutorial/classes.html) en Python. Ensuite, vous pouvez continuer avec un tutoriel sur ['tkinter'] (https://docs.python.org/3/library/tkinter.html). –

+0

vous pourriez bénéficier d'utiliser un bon IDE qui vérifiera l'erreur pour vous afin que vous puissiez éviter des problèmes simples comme l'indentation et les citations manquantes. Peut-être quelque chose comme Eclipse ou Py Charm. –

Répondre

0

Voici un petit coup de pouce en avant:

from tkinter import Tk, Frame, Menu, Scrollbar, Text 
from tkinter import RIGHT, LEFT, BOTH, END, Y 
from tkinter import StringVar 

class Example(Frame): 
    def __init__(self, master): 
     super().__init__(master) 
     self.pack(fill=BOTH, expand=True) 
     self.initUI() 

    def initUI(self): 
     self.master.title("syntax explenation for shopfloor") 

     menubar = Menu(self.master) 
     self.master.config(menu=menubar) 

     syntaxMenu = Menu(menubar, tearoff=False) 
     submenu = Menu(syntaxMenu) 
     syntaxMenu.add_cascade(label='Math', menu=submenu, underline=0) 
     submenu.add_command(label="abs()", command=self.onSyntaxabs) 
     submenu.add_command(label="cos()", command=self.onSyntaxcos) 
     submenu.add_command(label="sin()", command=self.onSyntaxsin) 
     submenu.add_cascade(label="log()", command=self.onSyntaxlog) 
     submenu = Menu(syntaxMenu) 
     syntaxMenu.add_cascade(label='Inqurie', menu=submenu, underline=0) 
     submenu.add_command(label="inqiureText()", command=self.onSyntaxinquire) 

     menubar.add_cascade(label="Syntax", underline=0, menu=syntaxMenu) 


     S = Scrollbar(self)        # Should probably be an instance member as well 
     self.text = Text(self, height=20, width=60, bg="lightblue") 
     S.pack(side=RIGHT, fill=Y) 
     self.text.pack(side=LEFT, fill=BOTH) 
     self.text.pack(side=RIGHT, fill=BOTH) 
     S.config(command=self.text.yview) 
     self.text.config(yscrollcommand=S.set) 

     self.setText("?") 

    def setText(self, text): 
     self.text.delete(1.0,END) 
     self.text.insert(END, text) 


    def onSyntaxabs(self): 
     self.setText("Convert to absolute value, abs(-10) will respond with 10.") 

    def onSyntaxsin(self): 
     self.setText("Returns sinus value in decimal degrees") 

    def onSyntaxcos(self): 
     self.setText("Returns cosinus value in decimal degrees") 

    def onSyntaxlog(self): 
     self.setText("Returns the natural logarithm") 

    def onSyntaxinquire(self): 
     self.setText("Creates a pop-up box that you can enter text in.") 


def main(): 
    root = Tk() 
    root.geometry("500x600") 
    app = Example(master=root) 
    app.mainloop() 

if __name__ == '__main__': 
    main() 

En général, je vais essayer d'éviter d'importer tous ces symboles et juste faire quelque chose comme

import tkinter as tk 

alors où vous écrivez Frame ou RIGHT vous utiliseriez tk.Frame ou tk.RIGHT.

De plus, j'ai déplacé toute la création de votre widget à l'intérieur de la classe. Alors maintenant votre widget Texte est un membre de classe (self.text) et peut être facilement accessible et contrôlé depuis la classe - toutes vos méthodes onSyntax___ appellent setText (une autre méthode de classe) qui définit le contenu du widget Texte.

Espérons que ça aide.

+0

Ne serait-il pas préférable d'importer en tant que 'tk'. Importer sur plusieurs lignes de la même bibliothèque me semble être une mauvaise pratique. Pour tant d'importations je pense que l'utilisation de 'tk' serait mieux –

+0

@SierraMountainTech Je suis d'accord - J'espère que ma note sous le code n'était pas confuse. Pas autant en raison des trois lignes d'importations que j'ai utilisées, mais parce que c'est une tonne de globaux à importer, dont beaucoup sont communs (Y) et pourraient être la source de problèmes inattendus s'ils sont redéfinis. – jedwards

+0

Ya. Je suppose que les importations sont bonnes pour visualiser ce qui est réellement utilisé par tkinter. –

0

Merci à tous pour votre contribution.

Et je vais continuer à travailler avec votre post jedward. Je vais regarder dans Eclipse et Py Charm puisque j'ai vraiment besoin de quelque chose comme ça.