Seite 1 von 1

multi line text output

Verfasst: Dienstag 1. Dezember 2009, 17:20
von absoluter_beginner
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()
    

Verfasst: Dienstag 1. Dezember 2009, 17:25
von numerix
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/

Verfasst: Mittwoch 2. Dezember 2009, 12:28
von absoluter_beginner
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()
    

Verfasst: Mittwoch 2. Dezember 2009, 15:07
von busfahrer
Hallo

wenn du Zeile 49 änderst in

Code: Alles auswählen

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

Gruß...busfahrer

Verfasst: Mittwoch 2. Dezember 2009, 15:52
von wuf
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:

Verfasst: Mittwoch 2. Dezember 2009, 16:53
von absoluter_beginner
ich danke Euch! Es klappt jetzt :-)