kontinuierliche messwertdarstellung im fenster

Fragen zu Tkinter.
Antworten
Trollmops
User
Beiträge: 13
Registriert: Dienstag 15. Mai 2012, 11:47

hallo liebe pythongemeinde,

ich bin "relativ" neu bei python, und ganz und gar neu bei der nutzung von tkinter. vor folgendem problem stehe ich:

ich habe ein programm, welches beim aufruf messwerte erhält (endlos), diese analysiert, und die analyseergebnisse einfach auslistet (in der konsole ging das super).

grob sah das ungefähr so aus


def analyse(messwert): #messwerte werden analysiert
. . .tolle analyse #erspar ich euch
. . .print "analyseergebnis 1",analyse1,"analyseergebnis 2",analyse2

messung(analyse) # es wird kontinuierlich gemessen, und mit jedem erhaltenen messwert wird automatisch die analyse einmal gestartet




so. funktioniert in der konsole ganz toll, sieht aber doof aus, da verschiedene ergebnisse von interesse sind, die aber einfach nur hintereinander weg (durcheinander eben) aufgelistet werden.

mein wunsch war es diese in einem fenster aufzulisten, ergebnistyp 1 oben, ergebnistyp 2 unten usw.

nur wie bekomme ich die ausgewerteten ergebnisse in mein fenster, wie halte ich die endlosschleife aufrecht etc?
ursprünglich hatte ich mir gedacht, dass das fenster nichts weiter soll, als die auflistung im terminal zu ersetzen (vorerst).

geht das? wie geht das?


ich hoffe ihr könnt mir helfen, und vielen dank für eure zeit, schonmal im vorraus ;)

gruß, mops
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Trollmops

Dein Problem ist relativ einfach zu lösen:

Code: Alles auswählen

import random
import time
import Tkinter as tk

ANALYSIS_WIN_WIDTH = 60
ANALYSIS_WIN_HEIGHT = 10
NUM_OF_WINS = 3

class AnalysisWindow(tk.Frame):
    
    def __init__(self, name, win_color='white'):
        
        self.name = name
        self.win_color = win_color
        self.sample_count = 0
        
        tk.Frame.__init__(self, app_win)
        self.pack()
        
        self.label_var = tk.StringVar()
        self.label_var.set(name)
        tk.Label(self, textvariable=self.label_var, bd=1, relief='raised',
            pady=4).pack(fill='x')
        
        win_frame = tk.Frame(self)
        win_frame.pack(padx=10, pady=10)
        
        yscrollbar = tk.Scrollbar(win_frame, width=12, troughcolor='gray')
        yscrollbar.pack(side='right', fill='y')

        self.sample_win = tk.Text(win_frame, width=ANALYSIS_WIN_WIDTH,
            height=ANALYSIS_WIN_HEIGHT, bg=self.win_color, highlightthickness=0,
            yscrollcommand=yscrollbar.set)
        self.sample_win.pack()
        
        yscrollbar.config(command=self.sample_win.yview)
        
    def update(self, sample):
        self.sample_win.insert('0.0', sample)
        self.sample_count += 1
        self.label_var.set(self.name + " " + "({0})".format(self.sample_count))
        
def sample_reader():
    
    analysis_level = random.randint(0, 2)
    sample = "Messung-{v:0{digits}} von {t:1}\n".format(
        v=app_win.sample_count, digits=4,
        t=time.strftime("%Y.%M.%D %H:%M:%S", time.gmtime()))
    
    analysis_wins[analysis_level].update(sample)
    app_win.sample_count += 1
    
    app_win.after(500, sample_reader)
       
app_win = tk.Tk()
app_win.title("Analysis Level Display")

app_win.option_add(
    "*Label.font", ('helvetica', 12, 'bold')) #'lightgoldenrod3')
app_win.option_add(
    "*Label.foreground", 'steelblue4')

app_win.sample_count = 1

analysis_wins = [AnalysisWindow("Analysis Level-{0}".format(win + 1))
    for win in xrange(NUM_OF_WINS)]

sample_reader()

app_win.mainloop()
Bitte noch ein bisschen in die Tutorials schauen.

wuf :wink:
Take it easy Mates!
Trollmops
User
Beiträge: 13
Registriert: Dienstag 15. Mai 2012, 11:47

who, du hast mir ja direkt ein ganzes programm geschrieben! (sieht zumindest so aus ;) )


viel versteh ich davon nicht, obwohl ich einiges aus tutorials wiedererkenne. ich komme leider erst morgen dazu das alles mal zusammenzuschustern und auszuprobieren, dann fällts bestimmt auch leichter den code nachzuvollziehen. vielen vielen dank!


zu den tutorials, kannst du mich auf ein bestimmtes verweisen, also eins das zu meinem thema passt? ich hab schon viele tutorials durchgearbeitet, bin inzwischen auch super darin buttons zu setzen, auf deren klick hin sich ein neues fenster öffnet oder so, aber ich hatte keinen hinweis darauf gefunden das fenster einfach nur zur darstellung zu nutzen, sodass es sich automatisch aktualisiert etc. und für jeden messwert neu auf nen knopf zu drücken war nun auch nicht das wahre :D

also viel dank im vorraus, bei fragen werd ich mich morgen nochmal melden. (und wär super wenn du nen link zu den tutorials hast, von denen du meintest sie könnten mir hier weiterhelfen)


gruß, mops
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

z.B.

Python-Tutorial 3.2
PEP-8 Leitfaden
FredrikLundh
Effbot
tkDocs
NewMexicoTech
usw. usw.

Aber evtl. kennst du die meisten schon.

wuf :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Trollmops

Sorry bei meinem Skript hat sich noch ein Fehler eingeschlichen.

Code: Alles auswählen

t=time.strftime("%Y.%M.%D %H:%M:%S", time.gmtime())
sollte:

Code: Alles auswählen

t=time.strftime("%Y.%m.%d %H:%M:%S", time.gmtime())
heissen.

wuf :wink:
Take it easy Mates!
Trollmops
User
Beiträge: 13
Registriert: Dienstag 15. Mai 2012, 11:47

ah super! die tutorials sehen echt gut aus, besonders tfdocs. werd ich morgen also gut was zu tun haben :) ... ich frage mich nur wieso ich da nicht shcon drüber gestolpert bin, sondern stattdessen irgendwelche 0815 tutorials über "grundlagen" abtippen durfte.
Trollmops
User
Beiträge: 13
Registriert: Dienstag 15. Mai 2012, 11:47

so, ich hab dein skript grad ma so laufen lassen wie du es gepostet hast. AWESOME!!! :D

jetzt versteh ic hauch erst was das randomzeug da drin zu suchen hatte, bin halt noch nicht so gut im code lesen ohne zu wissen was er am ende macht. nun, wo ich das fenster mal gesehn hab ergibt auch alles sinn :)

ich werd mich nun mal ransetzen und alles ein wenig zusammenwerkeln, vielen vielen dank nochmal!
Montsi
User
Beiträge: 2
Registriert: Freitag 12. Oktober 2012, 17:16

wuf hat geschrieben:z.B.

Python-Tutorial 3.2
PEP-8 Leitfaden
FredrikLundh
Effbot
tkDocs
NewMexicoTech
usw. usw.

Aber evtl. kennst du die meisten schon.

wuf :wink:
Super. Da hat sich einer aber Mühe gegeben. Die Tutorials haben mir jetzt schon weitergeholfen, insbesondere das Erste und das Zweite.

LG

Clemens
rimsail
User
Beiträge: 1
Registriert: Montag 17. August 2020, 10:06

Ganz toller Beitrag!
Ich habe auch einen Weg gesucht, Messwerte mittels Python darzustellen.
Bin noch blutiger Anfänger.
Gleich ein ganzes Programm hat deshalb sehr geholfen.
Herzlichen Dank an den Author.
Antworten