Dürfte nur noch eine Kleinigkeit sein, komme aber auch nach etlichen Versuchen nicht drauf.
grid, Fragen zu Layout
Hmm, habe gerade festgestellt, daß meine X-Scrollbar zwar funktioniert, aber statt auf die horizontale Ausrichtung zu reagieren, reagiert es auf die Y-Scrollbar.
Dürfte nur noch eine Kleinigkeit sein, komme aber auch nach etlichen Versuchen nicht drauf.
Dürfte nur noch eine Kleinigkeit sein, komme aber auch nach etlichen Versuchen nicht drauf.
Wieder ein kleiner Schritt weiter.
Mein Fehler, für das synchrone Verhalten zwischen X- u. Y-Scrollbar, konnte ich lösen.
Y-Scrollbar funktioniert prima, die X-Scrollbar leider immer noch nicht.
Hier nochmals der Code-Ausschnitt, vielleicht fällt Euch was auf?
Mein Fehler, für das synchrone Verhalten zwischen X- u. Y-Scrollbar, konnte ich lösen.
Y-Scrollbar funktioniert prima, die X-Scrollbar leider immer noch nicht.
Hier nochmals der Code-Ausschnitt, vielleicht fällt Euch was auf?
Code: Alles auswählen
def set_scrolled_entries(self, parent, label_names, result, screeny):
self.entry_vars = [tk.StringVar() for _ in label_names]
self.entries = list()
scroll_frame = tk.Frame(parent, bg='red')
canvas = tk.Canvas(scroll_frame, highlightthickness=0)
canvas.grid(row=0, column=1, sticky=tk.NSEW)
xscroll = tk.Scrollbar(scroll_frame, orient=tk.HORIZONTAL,
command=canvas.xview)
xscroll.grid(row=1, column=1, sticky=tk.EW)
yscroll = tk.Scrollbar(scroll_frame, orient=tk.VERTICAL,
command=canvas.yview)
yscroll.grid(row=0, column=2, sticky=tk.NS)
canvas.config(xscrollcommand=xscroll.set)
scroll_frame.grid_rowconfigure(1, weight=1)
canvas.config(yscrollcommand=yscroll.set)
scroll_frame.grid_rowconfigure(0, weight=1)
self.canvas = canvas
self.bind_scroll(xscroll, self.x_scroll)
self.bind_scroll(yscroll, self.y_scroll)
label_frame = tk.Frame(canvas)
ENTRY_IPADX = 5 # Abstand zu Text in x
ENTRY_IPADY = 2 # Abstand zu Text in y
for i, (var, name) in enumerate(zip(self.entry_vars,
self.label_names)):
label_container = tk.Frame(label_frame,)
label_container.grid(row=i, column=0, padx=10, pady=10,
sticky=tk.NW)
label = tk.Label(label_container, text=name,
font=self.conf['font'])
label.grid(ipady=5, sticky=tk.W)
entry_container = tk.Frame(label_frame,relief='sunken',
bd=1, bg=self.conf['entry_bg'])
entry_container.grid(row=i, column=1)
entry = tk.Entry(entry_container, textvariable=var, width=70,
font=self.conf['font'], bg=self.conf['entry_bg'], bd=0,
highlightthickness=0)
entry.grid(row=0, column=0, padx=ENTRY_IPADX, pady=ENTRY_IPADY)
try:
var.set(''.join([row[i] for row in result]))
except IndexError:
var.set('IndexError')
self.entries.append(var)
canvas.create_window(0, 0, window=label_frame, anchor=tk.NW)
canvas.update_idletasks()
x, y, w, h = label_frame.bbox(tk.ALL)
h_max = h
if h > (self.screeny - 150):
h_max = (self.screeny - 150)
canvas.config(scrollregion=(x, y, w, h), width=w, height=h_max)
return scroll_frame
def check(self, event):
self.controller.process(self.items)
def run(self):
self.root.mainloop()
def bind_scroll(self, widget, mode):
#~~ Windows
widget.bind("<MouseWheel>", mode)
#~~ Linux
widget.bind("<Button-4>", mode)
widget.bind("<Button-5>", mode)
def x_scroll(self, event):
if event.num == 5 or event.delta < 0:
self.canvas.xview_scroll(1, "unit")
elif event.num == 4 or event.delta > 0:
self.canvas.xview_scroll(-1, "unit")
def y_scroll(self, event):
if event.num == 5 or event.delta < 0:
self.canvas.yview_scroll(1, "unit")
elif event.num == 4 or event.delta > 0:
self.canvas.yview_scroll(-1, "unit")Ja. Du solltest erstmal den ganzen kopierten Code des vertikalen und des horizontalen Scrollbars zusammenführen.Nobuddy hat geschrieben:Hier nochmals der Code-Ausschnitt, vielleicht fällt Euch was auf?
Das Leben ist wie ein Tennisball.
Ja ich weiß, 'das Leben ist wie ein Tennisball', aber wie die Scrollbars zusammen führen?EyDu hat geschrieben:Ja. Du solltest erstmal den ganzen kopierten Code des vertikalen und des horizontalen Scrollbars zusammenführen.Nobuddy hat geschrieben:Hier nochmals der Code-Ausschnitt, vielleicht fällt Euch was auf?
Ich habe den Code für die X-Scrollbar weiter nach unten, unter die for-Schleife getan, da die X-Scrollbar nicht über label und entry gehen soll, sondern nur auf das entry-Feld.
Code: Alles auswählen
def set_scrolled_entries(self, parent, label_names, result, screeny):
self.entry_vars = [tk.StringVar() for _ in label_names]
self.entries = list()
scroll_frame = tk.Frame(parent, bg='red')
canvas = tk.Canvas(scroll_frame, highlightthickness=0)
canvas.grid(row=0, column=1, sticky=tk.NSEW)
yscroll = tk.Scrollbar(scroll_frame, orient=tk.VERTICAL,
command=canvas.yview)
yscroll.grid(row=0, column=2, sticky=tk.NS)
canvas.config(yscrollcommand=yscroll.set)
scroll_frame.grid_rowconfigure(0, weight=1)
self.canvas = canvas
self.bind_scroll(yscroll, self.y_scroll)
label_frame = tk.Frame(canvas)
ENTRY_IPADX = 5 # Abstand zu Text in x
ENTRY_IPADY = 2 # Abstand zu Text in y
for i, (var, name) in enumerate(zip(self.entry_vars,
self.label_names)):
label_container = tk.Frame(label_frame,)
label_container.grid(row=i, column=0, padx=10, pady=10,
sticky=tk.NW)
label = tk.Label(label_container, text=name,
font=self.conf['font'])
label.grid(ipady=5, sticky=tk.W)
entry_container = tk.Frame(label_frame,relief='sunken',
bd=1, bg=self.conf['entry_bg'])
entry_container.grid(row=i, column=1)
entry = tk.Entry(entry_container, textvariable=var, width=70,
font=self.conf['font'], bg=self.conf['entry_bg'], bd=0,
highlightthickness=0)
entry.grid(row=0, column=0, padx=ENTRY_IPADX, pady=ENTRY_IPADY)
try:
var.set(''.join([row[i] for row in result]))
except IndexError:
var.set('IndexError')
self.entries.append(var)
xscroll = tk.Scrollbar(scroll_frame, orient=tk.HORIZONTAL,
command=canvas.xview)
xscroll.grid(row=1, column=1, sticky=tk.EW)
canvas.config(xscrollcommand=xscroll.set)
scroll_frame.grid_rowconfigure(1, weight=1)
self.bind_scroll(xscroll, self.x_scroll)
canvas.create_window(0, 0, window=label_frame, anchor=tk.NW)
canvas.update_idletasks()
x, y, w, h = label_frame.bbox(tk.ALL)
h_max = h
if h > (self.screeny - 150):
h_max = (self.screeny - 150)
canvas.config(scrollregion=(x, y, w, h), width=w, height=h_max)
return scroll_frameHi Nobuddy
Hier etwas zum austesten:
Gruß wuf
Hier etwas zum austesten:
Code: Alles auswählen
def set_scrolled_entries(self, parent, label_names, result, screeny):
self.entry_vars = [tk.StringVar() for _ in label_names]
self.entries = list()
scroll_frame = tk.Frame(parent, bg='red')
canvas = tk.Canvas(scroll_frame, highlightthickness=0)
canvas.grid(row=0, column=1, sticky=tk.NSEW)
#xscroll = tk.Scrollbar(scroll_frame, orient=tk.HORIZONTAL,
#command=canvas.xview)
xscroll = tk.Scrollbar(scroll_frame, orient=tk.HORIZONTAL,
command=self.horizontal_scroll)
xscroll.grid(row=1, column=1, sticky=tk.EW)
self.xscroll = xscroll
yscroll = tk.Scrollbar(scroll_frame, orient=tk.VERTICAL,
command=canvas.yview)
yscroll.grid(row=0, column=2, sticky=tk.NS)
canvas.config(xscrollcommand=xscroll.set)
scroll_frame.grid_rowconfigure(1, weight=1)
#canvas.config(yscrollcommand=xscroll.set)
canvas.config(yscrollcommand=yscroll.set)
scroll_frame.grid_rowconfigure(0, weight=1)
self.canvas = canvas
#self.bind_scroll(xscroll, self.x_scroll)
#self.bind_scroll(xscroll, self.horizontal_scroll)
self.bind_scroll(yscroll, self.y_scroll)
label_frame = tk.Frame(canvas)
ENTRY_IPADX = 5 # Abstand zu Text in x
ENTRY_IPADY = 2 # Abstand zu Text in y
for i, (var, name) in enumerate(zip(self.entry_vars,
self.label_names)):
label_container = tk.Frame(label_frame,)
label_container.grid(row=i, column=0, padx=10, pady=10,
sticky=tk.NW)
label = tk.Label(label_container, text=name,
font=self.conf['font'])
label.grid(ipady=5, sticky=tk.W)
entry_container = tk.Frame(label_frame,relief='sunken',
bd=1, bg=self.conf['entry_bg'])
entry_container.grid(row=i, column=1)
entry = tk.Entry(entry_container, textvariable=var, width=70,
font=self.conf['font'], bg=self.conf['entry_bg'], bd=0,
highlightthickness=0)
entry.grid(row=0, column=0, padx=ENTRY_IPADX, pady=ENTRY_IPADY)
entry.bind("<FocusIn>", self.entry_focus_callback)
try:
var.set(''.join([row[i] for row in result]))
except IndexError:
var.set('IndexError')
self.entries.append(var)
canvas.create_window(0, 0, window=label_frame, anchor=tk.NW)
canvas.update_idletasks()
x, y, w, h = label_frame.bbox(tk.ALL)
h_max = h
if h > (self.screeny - 150):
h_max = (self.screeny - 150)
canvas.config(scrollregion=(x, y, w, h), width=w, height=h_max)
return scroll_frame
def check(self, event):
self.controller.process(self.items)
def run(self):
self.root.mainloop()
def bind_scroll(self, widget, mode):
#~~ Windows
widget.bind("<MouseWheel>", mode)
#~~ Linux
widget.bind("<Button-4>", mode)
widget.bind("<Button-5>", mode)
def entry_focus_callback(self, event):
print('Focus')
event.widget.config(xscrollcommand=self.xscroll.set)
self.entry_focus_pointer = event.widget
def horizontal_scroll(self, *args):
scroll_mode, value = args[0], args[1]
print(scroll_mode, value)
if scroll_mode == "scroll":
units = args[2]
self.entry_focus_pointer.xview_scroll(value, units)
elif scroll_mode == "moveto":
self.entry_focus_pointer.xview_moveto(value)
def x_scroll(self, event):
if event.num == 5 or event.delta < 0:
self.canvas.xview_scroll(1, "unit")
elif event.num == 4 or event.delta > 0:
self.canvas.xview_scroll(-1, "unit")
def y_scroll(self, event):
if event.num == 5 or event.delta < 0:
self.canvas.yview_scroll(1, "unit")
elif event.num == 4 or event.delta > 0:
self.canvas.yview_scroll(-1, "unit")Löst der obige Code noch nicht!Nobuddy hat geschrieben:Ich habe den Code für die X-Scrollbar weiter nach unten, unter die for-Schleife getan, da die X-Scrollbar nicht über label und entry gehen soll, sondern nur auf das entry-Feld.
Gruß wuf
Take it easy Mates!
Hallo wuf
Habe alles so übernommen, kann aber keine optische Änderung feststellen.
Y-Scrollbar funktioniert und X-Scrollbar nicht.
Hier mal ein Bild wie es vorher schon war und jetzt auch noch so ist.
http://s14.directupload.net/file/d/3083 ... ez_png.htm
Nachtrag:
Habe Deinen letzten Post zu spät gesehen.
Danke für den Hinweis, so funktioniert es!
http://s7.directupload.net/file/d/3083/7oaks875_png.htm
Die Handhabung ist so völlig in Ordnung, glaube da muß man nichts mehr dran herumschrauben.
Grüße Nobuddy
Habe alles so übernommen, kann aber keine optische Änderung feststellen.
Y-Scrollbar funktioniert und X-Scrollbar nicht.
Hier mal ein Bild wie es vorher schon war und jetzt auch noch so ist.
http://s14.directupload.net/file/d/3083 ... ez_png.htm
Nachtrag:
Habe Deinen letzten Post zu spät gesehen.
Danke für den Hinweis, so funktioniert es!
http://s7.directupload.net/file/d/3083/7oaks875_png.htm
Die Handhabung ist so völlig in Ordnung, glaube da muß man nichts mehr dran herumschrauben.
Grüße Nobuddy
