Anonymous
Tkinter: метки исчезают, когда установлен StringVar
Сообщение
Anonymous » 07 ноя 2024, 17:12
Я пытаюсь создать графический интерфейс для отображения различных параметров процесса. В этом случае я использую метки со статическим текстом для имен параметров и метки со 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
1730988747
Anonymous
Я пытаюсь создать графический интерфейс для отображения различных параметров процесса. В этом случае я использую метки со статическим текстом для имен параметров и метки со StringVar для значений, поскольку они изменяются и требуют частого обновления. Проблема: как только StringVar изменяется (устанавливается через . set()), остальные метки со статическим текстом исчезнут. [code]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() [/code] Графический интерфейс перед обновлением StringVars(): [img]https://i.sstatic.net/gOZJy5Iz.png [/img] Графический интерфейс после обновления StringVars(): [img]https://i.sstatic.net /AK12zv8J.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79166216/tkinter-labels-disappear-when-stringvar-is-set[/url]