multi line text output

Fragen zu Tkinter.
Antworten
absoluter_beginner
User
Beiträge: 3
Registriert: Dienstag 1. Dezember 2009, 16:50

Hallo zusammen,
ich habe einen Dialog programmiert, der drei Druckknöpfe und ein Textfeld hat. Im Moment ist das Textfeld als single line text zu sehen (Label oder Entry). Ich möchte aber, dass dieses Textfeld mehrzeilig wird, so dass später Messwerte hintereinander eingefügt werden können. WEnn möglich, sollte man es sogar scrollen können.
Nur leider habe ich bisher nichts gefunden, was dem entspricht.

Danke im voraus

Code: Alles auswählen

#!/usr/bin/env python

import csv, sys, re, os, time, string, pickle, time, string
from Tkinter import *
from pylab import plot, subplot, grid, title, xlabel, ylabel, show

sys.path.append(os.getcwd() + '\..\InstrumentLib')
class Measure (Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()

        self.consoleOutputStringMeasure = StringVar()
        self.consoleOutputStringMeasure.set('Test')        


        self.StartFrame()
        #self.MeasureStart()


    def StartFrame (self):
        

        ControlFrame = Frame(root)
        ControlFrame.grid(row=4, column=0,  columnspan=50, pady=10, padx=180, sticky=W)
        
        self.OnButton = Button(ControlFrame, text="START", width=10, command=self.MeasureStart)
        self.OnButton.grid(row=1, column=1)

        self.OffButton = Button(ControlFrame, text="STOP", width=10, command=self.Stop)
        self.OffButton.grid(row=1, column=3)
        
        #Textfeld
        self.TopMsgBox = Label(root, width=80, textvariable=self.consoleOutputStringMeasure)
        self.TopMsgBox.grid(row=2, column=1, columnspan=9, sticky=W)

        B=Button(ControlFrame, width=10, text="QUIT", fg='red', command=root.quit)
        B.grid(row=1, column=5)
        
        
    def MeasureStart (self):
        print ("Start")
        

    def Stop (self):
        print ("Stop")
        
if __name__ == '__main__':


    
    root = Tk()
    
    app = Measure()

    

    root.maxsize(width=500, height=500)
    
    app.mainloop()
    
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Was du suchst ist ein Text-Widget.
Alles Notwendige findest du hier:

http://effbot.org/tkinterbook/tkinter-index.htm
http://infohost.nmt.edu/tcc/help/pubs/tkinter/
absoluter_beginner
User
Beiträge: 3
Registriert: Dienstag 1. Dezember 2009, 16:50

Danke für sie schnelle Hilfe!

Ich habe die Sache nun als Text- Widget umgesetzt. Aber es funktioniert nicht. Das Problem ist, dass ich meinen Inhalt dort anzeigen lassen möchte. Es handelt sich dabei um eine Stringvariable und genau da geht es nicht. Die Variable kann nicht im Textfeld angezeigt werden, sobald ich sie übergebe.
Hier ist eine Version mit mehreren Testausgaben, wo man genau sieht, dass die Übergabe per setter-Funktion nicht klappt...


Code: Alles auswählen


#!/usr/bin/env python

import csv, sys, re, os, time, string, pickle, time, string
from Tkinter import *
from pylab import plot, subplot, grid, title, xlabel, ylabel, show

sys.path.append(os.getcwd() + '\..\InstrumentLib')
class Measure (Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        
        self.tmp= "Dies ist der Inhalt von self.tmp"
        print self.tmp
        
        self.consoleOutputStringMeasure = StringVar()
        self.consoleOutputStringMeasure.set(self.tmp)
        print ("Uebergebener Parameter")
        print self.consoleOutputStringMeasure    

        self.StartFrame()
        #self.MeasureStart()


    def StartFrame (self):
        

        ControlFrame = Frame(root)
        ControlFrame.grid(row=4, column=0,  columnspan=50, pady=10, padx=180, sticky=W)
        
        self.OnButton = Button(ControlFrame, text="START", width=10, command=self.MeasureStart)
        self.OnButton.grid(row=1, column=1)

        self.OffButton = Button(ControlFrame, text="STOP", width=10, command=self.Stop)
        self.OffButton.grid(row=1, column=3)
        
        #Textfeld
        self.TopMsgBox = Text()
        self.TopMsgBox.config(font=('courier', 15, 'normal'))
        self.TopMsgBox.config(width=20, height=12)
        self.TopMsgBox.grid(row=2, column=1, columnspan=9)
        print ("inhalt Self.tmp")
        print self.tmp
        self.consoleOutputStringMeasure.set(self.tmp)
        print ("test111111111111111111111111111")
        print self.consoleOutputStringMeasure
        self.TopMsgBox.insert(END, self.consoleOutputStringMeasure) 
        
                
        # quit-Buttons
        B=Button(ControlFrame, width=10, text="QUIT", fg='red', command=root.quit)
        B.grid(row=1, column=5)
        
        
    def MeasureStart (self):
        print ("Start")
        

    def Stop (self):
        print ("Stop")
        
if __name__ == '__main__':


    
    root = Tk()
    
    app = Measure()

    

    root.maxsize(width=500, height=500)
    
    app.mainloop()
    
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo

wenn du Zeile 49 änderst in

Code: Alles auswählen

self.TopMsgBox.insert(END, self.consoleOutputStringMeasure.get())
scheint es zu funktionieren.

Gruß...busfahrer
Alles wird gut ;-)
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo absoluter_beginner

Auf den Tipp von 'busfahrer' aufbauend würde somit die Zeile 48 zu:

Code: Alles auswählen

print self.consoleOutputStringMeasure.get()
Gruss wuf :wink:
Take it easy Mates!
absoluter_beginner
User
Beiträge: 3
Registriert: Dienstag 1. Dezember 2009, 16:50

ich danke Euch! Es klappt jetzt :-)
Antworten