mir gelingt es mit tk im Fenstermodus Buttons, sowie Ein- und Ausgaben einigermassen zu plazieren.
Habe die Fenstergrösse ermittelt und dann die xy - Positionen versucht im Verhältnis vorzugeben:
Das klappte auch im Ansatz; würde mir vielleicht schon genügen.
Die Grid - Methode ist ja m.E. fraglich, wenn auch noch ein Listenfeld eingebettet werden soll.
Meine Versuche, das Programm per Canvas abzubilden, sehen allerdings mehr als traurig aus.
Die Elemente landen an "unmöglichsten" Orten.
Ich erwarte auch keineswegs keine perfekte Unterweisung, sondern nur Hinweise,
wie ich z.B. benamte Editierfelder und Buttoms einigermassen arrangieren kann.
Und Listenfelder incl. Scrollbar z.B. im mittleren 2/3 der vertikalen Auflösung,
sodass restliche Felder und Knöpfe sich ober- bzw. unterhalb plazieren lassen.
Hier ist der Code, de ich versucht habe:
Code: Alles auswählen
[code]# from tkinter import Tk, Canvas, Button, Label, Scrollbar
from tkinter import *
class MyButton(Button):
def action1 (self):
f_namen = open('E:\\namen.txt', 'a')
name = eingabe.get()
print (name)
liste.insert(END, name)
f_namen.write(name)
f_namen.write("\n")
eingabe.delete (0, 'end')
def action2 (self):
#print (var.get())
print ("dummy")
def info():
canvas.delete("info")
info_w_text = canvas.create_text(w- h/800 * 100, 10, anchor="nw", fill="darkblue", tag = "info", text="Breite: " + str(w))
info_h_text = canvas.create_text(w- h/800 * 100, 40, anchor="nw", fill="darkblue", tag = "info", text="Höhe : " + str(h))
root.after(500, info)
def exit():
root.destroy()
root = Tk()
# Canvas nach Bildschirm einstellen
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.overrideredirect(0) # (0) eröffnet als Fenster
canvas = Canvas(root, width=w, height=h, background="white")
canvas.pack(fill='both', expand=True)
f_namen = open('E:\\namen.txt', 'r')
inhalt_namen = f_namen.readlines()
widget = Label(canvas, text="Geben Sie Ihren Namen ein: ")
widget.place(x=w/20 + w/1000 * 70, y =h-40)
widget.pack()
canvas.create_window(300, 250, window = widget)
#canvas.create_window(x =(w/20 + w/1500) * 70, y =h-40, window = widget)
eingabe = Entry(widget, bd =2, width = 22)
eingabe.pack()
# button1 = MyButton(Button, text="Eingabe", bg="yellow", command=action1).place(x=w/20, y =h-80)
button1 = MyButton(canvas, text = "Eingabe", bg="yellow")
button1 ["command"] = button1.action1
button1.place(x=w/20 +w/1500 * 40, y =h-800)
button1.pack()
#var = IntVar()
#checkbutton = Checkbutton (canvas, text = "Bestätigen", variable = var)
#checkbutton.place(x=w/20 + w/1500 * 40, y =h-80)
#checkbutton.pack()
button2 = MyButton(root, text = "Ein/Aus")
button2.place(x=w/20 + w/1500 * 80, y =h-800)
button2 ["command"] = button2.action2
button2.pack()
button3 = Button(canvas, text="Exit", bg="silver", command=exit)
button3.place(x=w/20 +w/1500 * 120, y =h-800)
scrollbar = Scrollbar(canvas)
liste = Listbox(root, yscrollcommand = scrollbar.set, width=30)
liste.config(font=("Arial", 12))
liste.place(x=w/20 + w/1500 * 20, y =h-400)
liste.pack()
for zeile in inhalt_namen:
liste.insert(END, zeile)
f_namen.close()
scrollbar.config(command=liste.yview)
scrollbar.place(x=w/20 + w/1500 * 500, y =h-400)
scrollbar.pack(fill = "y")
root.mainloop()