2017-09-08 5 views
0

Ich habe eine Menüleiste und ein Textfeld erstellt, in der Textbox möchte ich die Informationen in der Variablen anzeigen, die zu der chooice, in gemacht wurde das Menü.Wie zeige ich einen bestimmten Text in einem Textfeld nach Wahl aus einer Menüleiste

Aber ich kann nicht herausfinden, wie.

Heres, was ich durch verschiedene Führer im Web zusammengestellt habe. Ich bin sehr neu in Python und bin immer noch mit dem Konzept auf Objekte und Klassen struggeling, so dass jede Hilfe überhaupt sehr geschätzt wird.

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

Es gibt viele Probleme mit Ihrem Code. Sie müssen Ihren Einzug korrigieren. Sie importieren aus tkinter zweimal ohne Grund. 'info =?' ist keine gültige Aussage, die ich implizieren würde, bedeutet 'info = "?" '. Sie haben 'def onSyntaxcos():' zweimal definiert und so weiter. –

+0

Zuerst müssen Sie verstehen, was eine ['class'] (https://docs.python.org/3/tutorial/classes.html) in Python ist. Dann könnten Sie mit einem Tutorial über ['tkinter'] (https://docs.python.org/3/library/tkinter.html) fortfahren. –

+0

Sie könnten von der Verwendung einer guten IDE profitieren, die eine Fehlerprüfung für Sie durchführt, damit Sie einfache Probleme wie Einrückung und fehlende Anführungszeichen vermeiden können. Vielleicht etwas wie Eclipse oder Py Charm. –

Antwort

0

Hier ist ein wenig Schub nach vorn:

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

Im Allgemeinen würde ich versuchen, diese Symbole alle zu vermeiden, importieren und nur etwas tun, wie

import tkinter as tk 

dann, wo Sie Frame schreiben oder RIGHT verwenden Sie tk.Frame oder tk.RIGHT.

Außerdem habe ich alle Ihre Widget-Erstellung innerhalb der Klasse verschoben. Jetzt ist Ihr Text-Widget ein Klassenmitglied (self.text) und kann einfach aus der Klasse heraus aufgerufen und kontrolliert werden - alle Methoden rufen setText (eine andere Klassenmethode) auf, die den Inhalt des Textwidgets festlegt.

Ich hoffe, es hilft.

+0

Wäre es nicht am besten, als 'tk' zu importieren. Das Importieren von mehreren Zeilen aus der gleichen Bibliothek scheint für mich eine schlechte Übung zu sein. Bei so vielen Importen würde ich denken, 'tk' wäre besser –

+0

@SierraMountainTech Ich stimme zu - Ich hoffe, meine Notiz unter dem Code war nicht verwirrend. Nicht so sehr wegen der drei importierten Linien, sondern weil es eine Tonne * von Globalen ist, die importiert werden sollen, von denen viele üblich sind ("Y") und die Ursache für unerwartete Probleme sein können, wenn sie neu definiert werden. – jedwards

+0

Ya. Ich denke, die Importe sind gut um zu visualisieren, was tatsächlich von tkinter verwendet wird. –

0

Vielen Dank für Ihre Eingabe.

Und ich werde weiterhin mit Ihrem Post Jedward arbeiten. Ich schaue mir Eclipse und Py Charm an, da ich so etwas wirklich brauche.

Verwandte Themen