Tkinter: метки исчезают, когда установлен StringVarPython

Программы на Python
Ответить
Anonymous
 Tkinter: метки исчезают, когда установлен StringVar

Сообщение Anonymous »

Я пытаюсь создать графический интерфейс для отображения различных параметров процесса. В этом случае я использую метки со статическим текстом для имен параметров и метки со StringVar для значений, поскольку они изменяются и требуют частого обновления.
Проблема: как только StringVar изменяется (устанавливается через . set()), остальные метки со статическим текстом исчезнут.

Код: Выделить всё

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import tkinter as tk
from tkinter import ttk
from py_openshowvar import openshowvar

# Import eigene Bibliotheken
import unveraenderliche
import veraenderliche
import schichtabhaengige

# Definition Variablen
LARGE_FONT= ("Verdana", 12)

# Globale

global istlayer
global istll
global sollll
global schichtString
global laserString

istlayer = 0
istll = 0.0
sollll= 0.0
currentlayer = 0

# Verbindung mit Kuka
client = openshowvar('172.31.1.147', 7000);
client.can_connect;
aktiv = str(client.read('$Pro_State1', debug=False))
aktiv = aktiv.strip("b'")
print("Programm aktiv")

# Funktion zur Aktualisierung der Daten
def refreshStats():
aktiv = str(client.read('$Pro_State1', debug=False))
aktiv = aktiv.strip("b'")
global istlayer
global istll
global sollll

if aktiv=="#P_ACTIVE":
print("Programm aktiv")
# Auslesen der veraenderlichen Variablen
veraenderlichevar = veraenderliche.veraenderliche(client);
istlayer = int(veraenderlichevar[0])
istll = float(veraenderlichevar[1])
triangx = float(veraenderlichevar[2])
triangz = float(veraenderlichevar[3])
#isttd1 = float(veraenderlichevar[4])
#isttg1 = float(veraenderlichevar[5])
isttd2 = float(veraenderlichevar[6])
isttg2 = float(veraenderlichevar[7])
istdg = float(veraenderlichevar[8])/2560
sollvel = float(veraenderlichevar[9])
istvel = float(veraenderlichevar[10])

# Auslesen der schichtabhaengigen Variablen bei Schichtwechsel
if currentlayer < istlayer:
schichtabhvar = schichtabhaengige.schichtabhaengige(client)
sollll = float(schichtabhvar[0])
#sollhoehe = float(schichtabhvar[1])
#sollbreite = float(schichtabhvar[2])
if istlayer == 1:
unveraenderlichevar = unveraenderliche.unveraenderliche(client)
adaptll = float(unveraenderlichevar[0])
adapta = float(unveraenderlichevar[1])
adaptb = float(unveraenderlichevar[2])
adaptc = float(unveraenderlichevar[3])
adaptd = float(unveraenderlichevar[4])
adaptp0 = float(unveraenderlichevar[5])
#maxlayer = float(unveraenderlichevar[6])
#solltd1 = float(unveraenderlichevar[7])
#solltg1 = float(unveraenderlichevar[8])
solltd2 = float(unveraenderlichevar[9])
solltg2 = float(unveraenderlichevar[10])
solldg = float(unveraenderlichevar[11])
sollfokus = float(unveraenderlichevar[12])
currlayer = istlayer

#print("DG: "+str(istdg)+"/"+str(solldg))
print("Geschw.: "+str(istvel)+"/"+str(sollvel))
print("Laserleistung: "+str(istll)+"/"+str(sollll))

schichtString.set(str(istlayer) + "/" + "-")
laserString.set(str(istll) + "/"  + str(sollll))
app.after(500, refreshStats)
# Aufbau GUI

class LMDVisualizer(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

tk.Tk.iconbitmap(self, default="icon.ico")
tk.Tk.wm_title(self, "LMD Visualizer")
tk.Tk.geometry(self, "1900x1100+1913+0")

container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)

self.frames = {}

for F in (StartPage, PageOne):

frame = F(container, self)

self.frames[F] = frame

frame.grid(row=0, column=0, sticky="nsew")

self.show_frame(StartPage)

def show_frame(self, cont):

frame = self.frames[cont]
frame.tkraise()

class StartPage(tk.Frame):

def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="Start Page", font=LARGE_FONT)
label.pack(pady=10,padx=10)

button = ttk.Button(self, text="Monitoring",
command=lambda: controller.show_frame(PageOne))
button.pack()

button3 = ttk.Button(self, text="Exit",
command=lambda: quit())
button3.pack()

class PageOne(tk.Frame):

def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)

global schichtString
global laserString
schichtString = tk.StringVar()
laserString = tk.StringVar()
self.errormsg = tk.StringVar()

# Label zur Darstellung der Triangulationsdaten
self.triangLabel = tk.Label(self)
self.triangLabel.place(x=1375, y=575, height=520, width=520)
self.triangLabel.configure(activebackground="#d9d9d9")
self.triangLabel.configure(activeforeground="black")
self.triangLabel.configure(anchor='w')
self.triangLabel.configure(background="#00ff00")
self.triangLabel.configure(compound='left')
self.triangLabel.configure(disabledforeground="#a3a3a3")
self.triangLabel.configure(font="-family {Segoe UI} -size 9")
self.triangLabel.configure(foreground="#000000")
self.triangLabel.configure(highlightbackground="#d9d9d9")
self.triangLabel.configure(highlightcolor="#000000")
self.triangLabel.configure(relief="solid")
self.triangLabel.configure(text='''''')

# Label für den Kamerafeed
self.camLabel = tk.Label(self)
self.camLabel.place(x=1375, y=50, height=520, width=520)
self.camLabel.configure(activebackground="#ffffff")
self.camLabel.configure(activeforeground="black")
self.camLabel.configure(anchor='w')
self.camLabel.configure(background="#ff0000")
self.camLabel.configure(compound='left')
self.camLabel.configure(disabledforeground="#a3a3a3")
self.camLabel.configure(foreground="#000000")
self.camLabel.configure(highlightbackground="#d9d9d9")
self.camLabel.configure(highlightcolor="#000000")
self.camLabel.configure(relief="solid")
self.camLabel.configure(text='''''')

# Button zur Rückkehr ins Menue
self.backButton = tk.Button(self)
self.backButton.place(x=5, y=5, height=40, width=40)
self.backButton.configure(activebackground="#ffffff")
self.backButton.configure(activeforeground="black")
self.backButton.configure(background="#d9d9d9")
self.backButton.configure(disabledforeground="#a3a3a3")
self.backButton.configure(font="-family {Segoe UI} -size 9")
self.backButton.configure(foreground="#000000")
self.backButton.configure(highlightbackground="#d9d9d9")
self.backButton.configure(highlightcolor="#000000")
self.backButton.configure(text='''Back''')
self.backButton.configure(command=lambda: controller.show_frame(StartPage))

# Label zur Anzeige von Nachrichten (z.B.  Warnungen)
self.messageLabel = tk.Label(self)
self.messageLabel.place(x=50, y=5, height=40, width=1800)
self.messageLabel.configure(activebackground="#d9d9d9")
self.messageLabel.configure(activeforeground="black")
self.messageLabel.configure(anchor='w')
self.messageLabel.configure(background="#ffffff")
self.messageLabel.configure(compound='center')
self.messageLabel.configure(disabledforeground="#a3a3a3")
self.messageLabel.configure(font="-family {Segoe UI} -size 9")
self.messageLabel.configure(foreground="#000000")
self.messageLabel.configure(highlightbackground="#d9d9d9")
self.messageLabel.configure(highlightcolor="#c0c0c0")
self.messageLabel.configure(relief="solid")
self.messageLabel.configure(textvariable=self.errormsg)
self.errormsg.set('''''')

# Button zum manuellen Beenden des Datenlogging
self.stopButton = tk.Button(self)
self.stopButton.place(x=1855, y=5, height=40, width=40)
self.stopButton.configure(activebackground="#d70428")
self.stopButton.configure(activeforeground="black")
self.stopButton.configure(background="#ff0000")
self.stopButton.configure(disabledforeground="#a3a3a3")
self.stopButton.configure(font="-family {Segoe UI} -size 9")
self.stopButton.configure(foreground="#000000")
self.stopButton.configure(highlightbackground="#d9d9d9")
self.stopButton.configure(highlightcolor="#000000")
self.stopButton.configure(text='''STOP''')

# PanedWindow als Container für Graphen und Daten
self.panedWindow = tk.PanedWindow(self, orient="vertical", borderwidth=0, sashwidth=5)
self.panedWindow.place(x=5, y=50, height=1045, width=1365)
self.graphLabel = tk.Label(self.panedWindow)
self.panedWindow.paneconfig(self.graphLabel, height=520, width=1365)
self.panedWindow.add(self.graphLabel)
self.graphLabel.configure(relief="solid")
self.datenLabel = tk.Label(self.panedWindow)
self.panedWindow.add(self.datenLabel)
self.datenLabel.configure(relief="solid")

# Inhalt des Graphen-Labels

# Inhalt des Daten-Labels
self.headerdatenLabel = tk.Label(self.datenLabel, text="Übersicht über Soll- und Istdaten", font=("Arial","30","bold"))
self.headerdatenLabel.grid(column=0, row=0, columnspan=4, pady=20)
self.datenLabel.columnconfigure(0, weight=1)
self.datenLabel.columnconfigure(1, weight=1)
self.datenLabel.columnconfigure(2, weight=1)
self.datenLabel.columnconfigure(3, weight=1)
# Spalte 1
self.layerTextLabel = tk.Label(self.datenLabel, text="Schicht:", font=("Arial", "20"))
self.layerTextLabel.grid(column=0, row=1, sticky=tk.W)
self.llTextLabel = tk.Label(self.datenLabel, text="Laserleistung:", font=("Arial", "20"))
self.llTextLabel.grid(column=0, row=2, sticky=tk.W)
self.nahthoeheTextLabel = tk.Label(self.datenLabel, text="Nahthöhe:", font=("Arial", "20"))
self.nahthoeheTextLabel.grid(column=0, row=3, sticky=tk.W)
self.nahtbreiteTextLabel = tk.Label(self.datenLabel, text="Nahtbreite:", font=("Arial", "20"))
self.nahtbreiteTextLabel.grid(column=0, row=4, sticky=tk.W)
self.fokusTextLabel = tk.Label(self.datenLabel, text="Fokusdurchmesser:", font=("Arial", "20"))
self.fokusTextLabel.grid(column=0, row=5, sticky=tk.W)
# Spalte 2
self.layerWertLabel = tk.Label(self.datenLabel, textvariable=schichtString, font=("Arial", "20"))
self.layerWertLabel.grid(column=1, row=1, sticky=tk.W)
self.llWertLabel = tk.Label(self.datenLabel, textvariable=laserString, font=("Arial", "20"))
self.llWertLabel.grid(column=1, row=2, sticky=tk.W)
self.nahthoeheWertLabel = tk.Label(self.datenLabel, text="Drehzahl 1:", font=("Arial", "20"))
self.nahthoeheWertLabel.grid(column=1, row=3, sticky=tk.W)
self.nahtbreiteWertLabel = tk.Label(self.datenLabel, text="Drehzahl 1:", font=("Arial",  "20"))
self.nahtbreiteWertLabel.grid(column=1, row=4, sticky=tk.W)
self.fokusWertLabel = tk.Label(self.datenLabel, text="Drehzahl 1:", font=("Arial", "20"))
self.fokusWertLabel.grid(column=1, row=5, sticky=tk.W)
# Spalte 3
self.td1TextLabel = tk.Label(self.datenLabel, text="Drehzahl 1:", font=("Arial", "20"))
self.td1TextLabel.grid(column=2, row=1, sticky=tk.W)
self.tg1TextLabel = tk.Label(self.datenLabel, text="Durchfluss 1:", font=("Arial", "20"))
self.tg1TextLabel.grid(column=2, row=2, sticky=tk.W)
self.td2TextLabel = tk.Label(self.datenLabel, text="Drehzahl 2:", font=("Arial", "20"))
self.td2TextLabel.grid(column=2, row=3, sticky=tk.W)
self.tg2TextLabel = tk.Label(self.datenLabel, text="Durchfluss 2:", font=("Arial", "20"))
self.tg2TextLabel.grid(column=2, row=4, sticky=tk.W)
self.dgTextLabel = tk.Label(self.datenLabel, text="Düsengas:", font=("Arial", "20"))
self.dgTextLabel.grid(column=2, row=5, sticky=tk.W)
# Spalte 4
self.td1WertLabel = tk.Label(self.datenLabel, text="Drehzahl 1:", font=("Arial", "20"))
self.td1WertLabel.grid(column=3, row=1, sticky=tk.W)
self.tg1WertLabel = tk.Label(self.datenLabel, text="Durchfluss 1:", font=("Arial", "20"))
self.tg1WertLabel.grid(column=3, row=2, sticky=tk.W)
self.td2WertLabel = tk.Label(self.datenLabel, text="Drehzahl 2:", font=("Arial", "20"))
self.td2WertLabel.grid(column=3, row=3, sticky=tk.W)
self.tg2WertLabel = tk.Label(self.datenLabel, text="Durchfluss 2:", font=("Arial", "20"))
self.tg2WertLabel.grid(column=3, row=4, sticky=tk.W)
self.dgWertLabel = tk.Label(self.datenLabel, text="Düsengas:", font=("Arial", "20"))
self.dgWertLabel.grid(column=3, row=5, sticky=tk.W)

app = LMDVisualizer()
app.after(10, refreshStats)
app.mainloop()
client.close()
Графический интерфейс перед обновлением StringVars():
Изображение

Графический интерфейс после обновления StringVars():
[img]https://i.sstatic.net /AK12zv8J.png[/img]


Подробнее здесь: https://stackoverflow.com/questions/791 ... var-is-set
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»