Hallo liebe Mitglieder des Python Forums,
Bin gerade am Programmieren eines Prüfplatzes. Das Programm läuft soweit, hat jedoch einige Schwächen.
1. Sobald man auf den Button "Prüfprogramm starten" drückt, öffnet sich das zweite Fenster ordnungsgemäß. Dies geschieht mit einem command Befehl in Button B1. Das Programm springt nach Betätigung des Buttons nach "createNewWindow". Dort erstelle ich ein zweites Fenster. Jedoch weiß ich nicht, wie ich nun das erste Fenster automatisch schließen lasse, wenn das zweite auf geht.
2. Einer der beiden Radiobuttons im zweiten Fenster ist anfangs ohne etwas zu drücken aktiv,obwohl ich die Variable x vorher auf null setze. Verstehe meinen fehler dort nicht.
3.Eine Frage für die Zukunft: Wie programmiere ich folgendes Ereignis: Wenn Radiobutton 1 aktiv und Test starten =1 ---->Programm 1 läuft
Wenn Radiobutton 2 aktiv und Test starten=1------> Programm 2 läuft
Ich bin für jeden Tip oder Lösungsvorschlag dankbar!
from tkinter import *
def createNewWindow():
def Test_läuft():
B1["bg"] = "#00FF00"
return
def Abbruch():
B1["bg"] = "#FF0000"
return
#newWindow = Toplevel(root)
neuerTitel=Tk()
neuerTitel.title("Prüfplatz Laetus")
root = neuerTitel
textfenster=Text(root)
textfenster["width"] = 50
textfenster["bd"] = 3
B1 = Button(root, text="Test starten", command=Test_läuft)
B1["bd"] = 3
B1["width"] = 15
B2 = Button(root, text="Abbrechen", command=Abbruch)
B2["bd"] = 3
B2["width"] = 15
textfenster.grid(row=12,column=0,columnspan=5,sticky="s")
B1.grid(row=1, column=1, sticky="sw")
B2.grid(row=2, column=1, sticky="sw")
lab2 = Label(root, text=" Initialisierung")
lab2["font"] = "Arial 16 "
lab2.grid(row=0, column=0, sticky="w")
lab3 = Label(root, text="Log")
lab3["font"] = "Arial 12 italic"
lab3.grid(row=10, column=0, sticky="w")
x = IntVar()
x.set(0)
RB0 = Radiobutton(root, text="smartspect", variable=x,value=1)
RB1 = Radiobutton(root, text="iCam", variable=x,value=2)
RB0.grid(row=1, column=0, sticky="w")
RB1.grid(row=2, column=0, sticky="w")
#---Hauptprogramm-----
neuerTitel = Tk()
neuerTitel.title("Prüfplatz Laetus")
root = neuerTitel
B0 = Button(root,text="Prüfprogramm starten",command=createNewWindow)
B0["font"] = "Arial 15"
B0["bd"]=3
B0["width"]=30
B0["height"]=2
img1 = PhotoImage(file ="C:/Users/wolf_m/Pictures/Hund.PNG")
img2 = PhotoImage(file ="C:/Users/wolf_m/Pictures/Laetus.PNG")
lab4 = Label(root,image = img1)
lab5 = Label(root,image =img2)
B0.pack(side=TOP)
lab4.pack(side=LEFT)
lab5.pack(side=RIGHT)
root.mainloop()
Fenster schließen, nachdem Button gedrückt wurde
Hallo wulf3000,
1. Ist das erste Fenster das root Fenster? Wenn ja, dann nicht schliessen, ansonsten gibts die Methode window.destroy. Ob das schliessen des Fensters eine gute Idee ist, kannst nur Du beurteilen, man kann das Fenster auch verstecken
2. Ohne dass Du uns den Code zeigst, kannst nur Du wissen wo der Fehler liegt.
Sorry den Code hab ich übersehen. Bitte den Code zwischen die Codetags </>setzen.
3. Den Radiobuttens ist je ein Wert zuzuweisen, dann weisst Du welcher Radiobutten aktiv ist.
Schau Dir mal die Doku an:https://anzeljg.github.io/rin2/book2/24 ... utton.html
Gruss
Peter
1. Ist das erste Fenster das root Fenster? Wenn ja, dann nicht schliessen, ansonsten gibts die Methode window.destroy. Ob das schliessen des Fensters eine gute Idee ist, kannst nur Du beurteilen, man kann das Fenster auch verstecken
2. Ohne dass Du uns den Code zeigst, kannst nur Du wissen wo der Fehler liegt.
Sorry den Code hab ich übersehen. Bitte den Code zwischen die Codetags </>setzen.
3. Den Radiobuttens ist je ein Wert zuzuweisen, dann weisst Du welcher Radiobutten aktiv ist.
Schau Dir mal die Doku an:https://anzeljg.github.io/rin2/book2/24 ... utton.html
Gruss
Peter
Hallo Peter,
Erstmal danke für deine Antwort. Ich habe versucht den Radiobuttons einen Wert zuzuweisen mit value=...
Beispielsweise hat der Button RB0 den value = 1 , wenn er betätigt wurde. Jedoch verstehe ich nicht, wie ich ihn auslese. Mit einer if Abfrage funktioniert das ganze nicht. Versucht hatte ich: if RBO ==1: dann springe zum nächstfolgenden Programm. Leider funktioniert dies nicht.
Erstmal danke für deine Antwort. Ich habe versucht den Radiobuttons einen Wert zuzuweisen mit value=...
Beispielsweise hat der Button RB0 den value = 1 , wenn er betätigt wurde. Jedoch verstehe ich nicht, wie ich ihn auslese. Mit einer if Abfrage funktioniert das ganze nicht. Versucht hatte ich: if RBO ==1: dann springe zum nächstfolgenden Programm. Leider funktioniert dies nicht.
Code: Alles auswählen
import tkinter as tk
def zweitesFenster():
def Test_läuft():
B1["bg"] = "#00FF00"
neuerTitel = tk.Tk()
neuerTitel.title("Prüfplatz Laetus")
root = neuerTitel
lab0 = tk.Label(root,text = "Bitte DUT montieren und anschließen")
lab0["font"] = "Arial 20"
lab0["height"] = 5
lab0["width"] = 30
B3 = tk.Button(root,text = "Okay")
B3["bd"] = 3
B3["width"] = 15
B3["height"] = 2
B3["font"] = "Arial 15"
lab0.pack(side=TOP)
B3.pack(side=TOP)
return
def Abbruch():
B1["bg"] = "#FF0000"
return
#newWindow = Toplevel(root)
neuerTitel=tk.Tk()
neuerTitel.title("Prüfplatz Laetus")
root = neuerTitel
textfenster=tk.Text(root)
textfenster["width"] = 50
textfenster["bd"] = 3
B1 = tk.Button(root, text="Test starten", command=Test_läuft)
B1["bd"] = 3
B1["width"] = 15
B2 = tk.Button(root, text="Abbrechen", command=Abbruch)
B2["bd"] = 3
B2["width"] = 15
textfenster.grid(row=12,column=0,columnspan=5,sticky="s")
B1.grid(row=1, column=1, sticky="sw")
B2.grid(row=2, column=1, sticky="sw")
lab2 = tk.Label(root, text=" Initialisierung")
lab2["font"] = "Arial 16 "
lab2.grid(row=0, column=0, sticky="w")
lab3 = tk.Label(root, text="Log")
lab3["font"] = "Arial 12 italic"
lab3.grid(row=10, column=0, sticky="w")
x = tk.IntVar()
x.set(0)
RB0 = tk.Radiobutton(root, text="smartspect", variable=x,value=1)
RB1 = tk.Radiobutton(root, text="iCam", variable=x,value=2)
z=x.get()
print(z)
RB0.grid(row=1, column=0, sticky="w")
RB1.grid(row=2, column=0, sticky="w")
#---Hauptprogramm-----
neuerTitel = Tk()
neuerTitel.title("Prüfplatz Laetus")
root = neuerTitel
B0 = Button(root,text="Prüfprogramm starten",command=zweitesFenster)
B0["font"] = "Arial 15"
B0["bd"]=3
B0["width"]=30
B0["height"]=2
img1 = tk.PhotoImage(file ="C:/Users/wolf_m/Pictures/Hund.PNG")
img2 = tk.PhotoImage(file ="C:/Users/wolf_m/Pictures/Laetus.PNG")
lab4 = tk.Label(root,image = img1)
lab5 = tk.Label(root,image =img2)
B0.pack(side=TOP)
lab4.pack(side=LEFT)
lab5.pack(side=RIGHT)
root.mainloop()
Hi Peter. Habe dir den Code jetzt mal beigefügt und umgewandelt in import tkinter as tk...
Die x.get() Funktion gibt mir dennoch immer 0 aus. Egal ob ein Radiobutton angeklickt ist oder nicht.
Vielleicht kannst du mir helfen und deinen Vorschlag mal online stellen. LG!
Die x.get() Funktion gibt mir dennoch immer 0 aus. Egal ob ein Radiobutton angeklickt ist oder nicht.
Vielleicht kannst du mir helfen und deinen Vorschlag mal online stellen. LG!
Es darf nur ein Exemplar von tk.Tk im gesamten Programm geben. Weitere Fenster macht man mit tk.TopLevel.
Variablennamen sollen aussagekräftig sein, wenn Namen Nummern angehängt haben, dann sind diese nicht aussagekräftig.
neuerTitel ist ein sehr schlechter Name für ein Fenster. Warum nennst Du das dann erst später in root um?
Bei GUIs hat man keinen sequenzellen Ablauf. Du fragst x.get gleich nach dem Erzeugen ab, so dass niemand eine Chance hat, das zu ändern.
Benutze keine Verschachtelten Funktionen und keine globalen Variablen. Jedes nicht-triviale GUI-Programm braucht Klassendefinitionen.
Variablennamen sollen aussagekräftig sein, wenn Namen Nummern angehängt haben, dann sind diese nicht aussagekräftig.
neuerTitel ist ein sehr schlechter Name für ein Fenster. Warum nennst Du das dann erst später in root um?
Bei GUIs hat man keinen sequenzellen Ablauf. Du fragst x.get gleich nach dem Erzeugen ab, so dass niemand eine Chance hat, das zu ändern.
Benutze keine Verschachtelten Funktionen und keine globalen Variablen. Jedes nicht-triviale GUI-Programm braucht Klassendefinitionen.
Hi Sirius. Okay, danke für die Antworten. Jedoch hilft mir das nicht wirklich weiter. Das daran was falsch ist wusste ich schon und das Arbeiten mit Klassen habe ich vermieden weil ich Neuling im python programmieren bin.
Lösungshinweise wie ich die Buttons auslese würden mir eher helfen.
LG
Lösungshinweise wie ich die Buttons auslese würden mir eher helfen.
LG
Code: Alles auswählen
def button_abbruch():
result = tk.messagebox.askyesno("Warnung!",
"Soll das Programm wirklich geschlossen werden?")
if result:
root.destroy()
Ich habe auch erst versucht den Button Wert und "True" zu bekommen um damit dann so zu arbeiten, aber ich habe mich dran errinert das man unter Windows wegen alles 100 mal gefragt wird und daher habe ich es jetzt so gelöst.
Vielleicht kannst du meinen Code ja so umschreiben das wenn sich das Fenster schliesst ein neues auf geht. Du darfst aber nicht das "root" Fenster killen, da sonst das ganze programm geschlossen wird.
Ich würde es denke ich mal mit einer if schleife machenine Frage für die Zukunft: Wie programmiere ich folgendes Ereignis: Wenn Radiobutton 1 aktiv und Test starten =1 ---->Programm 1 läuft
Wenn Radiobutton 2 aktiv und Test starten=1------> Programm 2 läuft