ich bin noch ziemlicher Python-Neuling und brauche die Hilfe von euch Experten.
1. Die Imports von Tkinter, wie mache ich das am besten, wenn ich irgendwas wegnehme läuft meine Shell rot an?
2. Nun zum Hauptpunkt: Ich habe da ein kleines Programm geschrieben, mithilfe dessen die Mitarbeiter Zeiten von der Produktion für die Arbeitsvorbereitung nachtragen können sollen. Soweit läuft alles, bin sehr zufrieden mit mir, dafür dass es mein erstes Programm ist. Also Mitarbeiter trägt die Daten in die Entry Widgets ein und mit speichern werden sie direkt in einer Datei gespeichert. Läuft alles Tip Top. ABER ich hab mir eingebildet einen Live-Ticker zu implementieren. Wenn man auf aktualisieren klickt, soll er die Datei durchforsten, in einer Liste speichern und die Gesamtsumme nun als Label Variable oben rechts anzeigen.
Kurzum alles läuft bisher außer, dass der Inhalt des Labels "dataLabel" nicht aktualisiert wird, wie mache ich das am besten?
3. Habt ihr noch Anregungen für meinen Code?
Code: Alles auswählen
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Einzugeben sind nur Auftrag, Arbeitsgang und Zeit, Maschine kann direkt ausgewählt werden. da
# alle Maschinen ( Kostenstellen ) eingebettet sind.
# GUI wird Framework- und Lizenzunabhängig mit Tkinter visualisiert
#TO DO
#Live-Ticker Auswertung bisherige mannlose Stunden
import csv
import os
import sys
import time
import tkinter as tk
from tkinter import *
from tkinter import messagebox, Frame, Menu
class GUI(Frame):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Hauptfenster
self.master.title("Ghostshift")
self.master.configure(background= "#2ECCFA")
# Toolbar generieren
menubar = Menu(self.master)
self.master.config(menu=menubar)
helpMenu = Menu(menubar, tearoff=0)
helpMenu.add_command(label="Anleitung", command=self.action_get_help_dialog)
helpMenu.add_command(label="Autor", command=self.action_get_info_dialog)
menubar.add_cascade(label="Info", menu=helpMenu)
#Kostenstellen
machines = (
"",
"470.09", "470.03", "470.05", "421.04", "470.10",
"470.11", "470.12", "455.04", "455.02", "455.06",
"442.04", "441.02", "442.02", "453.01", "453.04"
)
#Aktualisieren Button erzeugen und anzeigen
reloadButton = tk.Button(font=("Calibri"), bg="#2ECCFA", text='Aktualisieren', fg='black',
relief='groove', activebackground='red',
command=self.get_data)
reloadButton.place(relx = 0.7, rely = 0.8462, relwidth=0.2, relheight=0.1)
#Speichern Button erzeugen und anzeigen
saveButton = tk.Button(font=("Calibri"), bg="#2ECCFA", text='Speichern', fg='black',
relief='groove', activebackground='green',
command=self.save_entry)
saveButton.place(relx = 0.4, rely = 0.8462, relwidth=0.2, relheight=0.1)
#Abbruch Button erzeugen und anzeigen
clearButton = tk.Button(font=("Calibri"), bg="#2ECCFA", text='Abbruch', fg='black',
relief='groove', activebackground='red',
command=self.clear_entry)
clearButton.place(relx = 0.1, rely = 0.8462, relwidth=0.2, relheight=0.1)
#Label
self.GhostLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", text='Mannlose Stunden')
self.GhostLabel.place(relx = 0.1, rely = 0.0770, relwidth=0.3, relheight=0.1)
var = IntVar(value=0)
try:
var = IntVar(value=(sum(data) / 60 ))
except:
var.set(value=42)
self.dataLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", textvariable=var)
self.dataLabel.place(relx = 0.6, rely = 0.0770, relwidth=0.3, relheight=0.1)
self.assignmentLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", text='Auftrag')
self.assignmentLabel.place(relx = 0.1, rely = 0.2307, relwidth=0.3, relheight=0.1)
self.operationLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", text='Arbeitsgang')
self.operationLabel.place(relx = 0.1, rely = 0.3846, relwidth=0.3, relheight=0.1)
self.machineLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", text='Kostenstelle')
self.machineLabel.place(relx = 0.1, rely = 0.5385, relwidth=0.3, relheight=0.1)
self.timeLabel = tk.Label(font=("Calibri"), bg="#2ECCFA", text='Zeit')
self.timeLabel.place(relx = 0.1, rely = 0.6923, relwidth=0.3, relheight=0.1)
#Eingabefelder
self.assignmentEntry = tk.Entry(bd=4, relief='sunken')
self.assignmentEntry.place(relx = 0.6, rely = 0.2307, relwidth=0.3, relheight=0.1)
self.operationEntry = tk.Entry(bd=4, relief='sunken')
self.operationEntry.place(relx = 0.6, rely = 0.3846, relwidth=0.3, relheight=0.1)
self.machineEntry = tk.Spinbox(values=machines, bd=4, relief='sunken')
self.machineEntry.place(relx = 0.6, rely = 0.5385, relwidth=0.3, relheight=0.1)
self.timeEntry = tk.Entry(bd=4, relief='sunken')
self.timeEntry.place(relx = 0.6, rely = 0.6923, relwidth=0.3, relheight=0.1)
#Funktionen der Buttons
def action_get_info_dialog(self):
m_text = "\
***************************\n\
BLA\n\
***************************"
messagebox.showinfo(message=m_text, title = "Autor")
def action_get_help_dialog(self):
m_text = "\
BLA\n\
"
messagebox.showinfo(message=m_text, title = "Anleitung")
def clear_entry(self):
self.assignmentEntry.delete(0, "end")
self.operationEntry.delete(0, "end")
self.machineEntry.delete(0, "end")
self.timeEntry.delete(0, "end")
def save_entry(self):
NeuerEintrag= []
NeuerEintrag.append(self.assignmentEntry.get())
NeuerEintrag.append(self.operationEntry.get())
NeuerEintrag.append(self.machineEntry.get())
NeuerEintrag.append(self.timeEntry.get())
with open('ghostshift.csv', 'a') as file:
file.write('{0}\n'.format('; '.join(str(n) for n in NeuerEintrag)))
# Benachrichtigungsfenster dass Inhalte X Y gespeichert wurden
messagebox.showinfo("Bestätigung", "Folgendes wurde gespeichert: \n" +
"Auftrag : " + self.assignmentEntry.get() + " ,\n" +
"Arbeitsgang : " + self.operationEntry.get() + " ,\n" +
"Maschine : " + self.machineEntry.get() + " ,\n" +
"Zeit : " + self.timeEntry.get() + " Minuten! "
)
file.close()
print(NeuerEintrag)
def get_data(self):
with open('ghostshift.csv', 'r') as file:
csv_file = csv.reader(file, delimiter=";")
data = []
for line in csv_file:
print("parse ...")
data.append(int(line[3]))
print(sum(data) / 60 )
print("parsing successful")
var = IntVar(value=78)
#var.set(value=sum(data))
dataLabel.after(500, var.set, sum(data))
# Ende
def main():
gui = Tk()
gui.title("Ghostshift")
gui.geometry("400x400")
gui = GUI()
gui.mainloop()
if __name__ == '__main__':
main()