ich versuche mich im Moment an einer Art Hausautomation. Bevor ich jedoch die einzelnen Geräte versuche anzusteuern, möchte ich mir mit Tkinter ein graphisches Interface programmieren. Mein erster Versuch bestand darin die Standard-Bibliothek von Tkinter zu verwenden. Den Code dazu seht ihr hier:
Code: Alles auswählen
#Bibliotheken
from tkinter import *
#Variablen
#Variable hilft beim einhalten der richtigen Zeilen und Spalten
test = 0
#Hauptmenue Zeilen
zeilen = 2
#Hauptmenue Spalten
spalten = 5
#Buttonbreite
buttonWidth = 10
#Buttonhoehe
buttonHeight = 2
#Schriftart
schriftArt = ('Arial', 14)
#Farbe Button an
colourAn = 'yellow'
#Farbe Button aus
colourAus = 'grey94'
#Initialisierung des Fensters fuer das Hauptmenue
window = Tk()
window.title('Zimmerautomation')
#Rahmen initialisieren und zentral positionieren
rahmen1 = Frame(window)
rahmen1.pack()
rahmen2 = Frame(window)
rahmen2.pack(side=BOTTOM)
#Definition der Befehle, die die Buttons ausfuehren sollen zum ANSCHALTEN
#Fenster Button an
def rollladenAn():
button1.config(bg=colourAn, command=rollladenAus)
#Fernseher Button an
def fernseherAn():
button2.config(bg=colourAn, command=fernseherAus)
#Deckenfluter Button an
def deckenfluterAn():
button3.config(bg=colourAn, command=deckenfluterAus)
#Nachttischlampe Button an
def tischlampeAn():
button4.config(bg=colourAn, command=tischlampeAus)
#Nachtmodus Button an
def ruhemodusAn():
button5.config(bg=colourAn, command=ruhemodusAus)
#Kino Button an
def kinoAn():
button6.config(bg=colourAn, command=kinoAus)
#Defintionen der Befehle, die die Buttons ausfuehren sollen zum AUSSCHALTEN
#Fenster Button aus
def rollladenAus():
button1.config(bg=colourAus, command=rollladenAn)
#Fernseher Button aus
def fernseherAus():
button2.config(bg=colourAus, command=fernseherAn)
#Deckenfluter Button aus
def deckenfluterAus():
button3.config(bg=colourAus, command=deckenfluterAn)
#Nachttischlampe Button aus
def tischlampeAus():
button4.config(bg=colourAus, command=tischlampeAn)
#Nachtmodus Button aus
def ruhemodusAus():
button5.config(bg=colourAus, command=ruhemodusAn)
#Kino Button aus
def kinoAus():
button6.config(bg=colourAus, command=kinoAn)
#Quit Button
def schliessen():
print('Schliessen')
#Arrays fuer die Texte der einzelnen Buttons im Hauptmenue
buttonText = ['Fenster', 'Fernseher', 'Deckenfluter', 'Tischlampe', 'Ruhemodus', 'Kino']
buttonCommands = [rollladenAn, fernseherAn, deckenfluterAn, tischlampeAn, ruhemodusAn, kinoAn]
#Initialisierung der Buttons im Hauptmenue
button1 = Button(rahmen1, text=buttonText[0], command=buttonCommands[0], width=buttonWidth, height=buttonHeight, font=schriftArt)
button2 = Button(rahmen1, text=buttonText[1], command=buttonCommands[1], width=buttonWidth, height=buttonHeight, font=schriftArt)
button3 = Button(rahmen1, text=buttonText[2], command=buttonCommands[2], width=buttonWidth, height=buttonHeight, font=schriftArt)
button4 = Button(rahmen1, text=buttonText[3], command=buttonCommands[3], width=buttonWidth, height=buttonHeight, font=schriftArt)
button5 = Button(rahmen1, text=buttonText[4], command=buttonCommands[4], width=buttonWidth, height=buttonHeight, font=schriftArt)
button6 = Button(rahmen1, text=buttonText[5], command=buttonCommands[5], width=buttonWidth, height=buttonHeight, font=schriftArt)
#button7 = Button(rahmen1, text=buttonText[6], command=buttonCommands[6], width=buttonWidth, height=buttonHeight, font=schriftArt, visible='No')
buttonQuit = Button(rahmen2, text='QUIT', command=schliessen, width=buttonWidth, height=buttonHeight, font=schriftArt)
#Hauptmenuebuttons werden in Arry eingetragen, jeder Button muss eingetragen werden
hButtons = [button1, button2, button3, button4, button5, button6, buttonQuit]
#Buttons werden erstellt
for i in range(zeilen):
for j in range(spalten):
hButtons[test].grid(row=i, column=j, padx=4, pady=4)
test=test + 1
if test == len(hButtons):
break
window.mainloop()
Meinen zweiter Versuch startete ich mit der Erweiterung Tix, weil diese die Möglichkeit einer ButtonBox enthält und für das Hinzufügen eines weiteren Buttons keine Variable benötigt und es damit ermöglicht einen Button über das Interface zu erstellen.
Hier mal ein Ansatz:
Code: Alles auswählen
import tkinter.tix as tix
def test(a):
#erstellt Titel der Buttonbox
top = tix.Label(a, padx=20, pady=10, bd=1, relief=tix.RAISED, text='Test Box')
#ordnet Titel an
top.pack(side=tix.TOP, fill=tix.BOTH, expand=1)
#erstellt Buttonbox
box = tix.ButtonBox(a, orientation=tix.HORIZONTAL)
#fuegt Buttons hinzu
box.add('fenster', text='Fenster', underline=0, width=5, command= ausdruck)
box.add('lampe', text='Lampe', underline=0, width=5, command= back)
#ordnet Buttons an
box.pack(side=tix.BOTTOM, fill=tix.X)
def ausdruck():
print ('Fenster')
def back():
print('Lampe')
if __name__ == '__main__':
fenster = tix.Tk()
test(fenster)
fenster.mainloop()
Vielleicht habt Ihr eine Idee, wie ich mein Problem lösen kann. Wenn ihr einen Lösungsvorschlag für eine der beiden Varianten habt oder eventuell eine ganz andere Herangehensweise auch mit einer anderen Bibliothek, wäre ich über eine Antwort sehr dankbar. Sollte es noch Fragen geben stehe ich gern zur Verfügung.
Schonmal Vielen Dank im Vorraus!!!
Grüße
Obiwaahn