Scrollbar mit Entries

Fragen zu Tkinter.
Antworten
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

hey,
ich bin grad damit beschäftigt mir ein Tkinter-Entry-Fenster mit Scrollbar zu erstellen.
komm aber nicht weiter...

Code: Alles auswählen

from Tkinter import *

master = Tk()
master.title('GUI-Verwaltung')
master.geometry('300x300+485+50')

scrollbar = Scrollbar(master)
scrollbar.pack(side=RIGHT, fill=Y)
listbox = Listbox(master, yscrollcommand=scrollbar.set)
listbox.pack(side=LEFT, fill=BOTH)

for i in range(100):
    en = Entry(master, width=18, relief="raised",font=('Arial', 9, 'bold'),  bg='#eeeee0', fg="#000000000", justify='center')
    en.insert(END, str(i))
    en.pack()

scrollbar.config(command=listbox.yview)

master.mainloop()
Wie kann man nun die Scrollbar mit den Entries verknüpfen ohne Anzeige der Listbox?
Hoffe ich hab net zu viel quatsch gemacht :)
BlackJack

@DMD: Was willst Du bei den Entries denn scrollen? Oder willst Du die Entries selbst scrollen, also mehr haben als auf einmal angezeigt werden? Dann würde man einen `Frame` mit den Entries bestücken und den `Frame` dann auf einem `Canvas` anzeigen, denn ein `Canvas` kann Scrollbalken haben. Oder man nimmt ein vernünftiges GUI-Rahmenwerk wo man sich solche grundlegenden Sachen nicht selber basteln muss.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@BlackJack Ein paar Sätze nützen DMD nichts. Zeig ihm doch wie das geht:

Code: Alles auswählen

import tkinter as tk

root = tk.Tk()

def container(parent):

    scrollbar=tk.Scrollbar(parent,orient='vertical')
    scrollbar.pack(side='right',fill='y',expand='false')

    canvas=tk.Canvas(parent,bd=0,highlightthickness=0)
    canvas.pack(fill='both', expand='true')

    frame = tk.Frame(parent,)
    frame.pack(side='bottom',anchor='nw')

    # -------------- make a frame with a vertical scrollbar ------------------------------------

    canvas.config(yscrollcommand=scrollbar.set)
    scrollbar.config(command=canvas.yview)
    interior_id = canvas.create_window(0, 0, window=frame,anchor='nw')

    # -------------- <Configure> events for the scrollbar frame ------------------------------------

    def canvas_configure(event,me=canvas,frame=frame,int_id = interior_id):
        if me.winfo_reqwidth() != frame.winfo_width(): me.itemconfigure(int_id, width=me.winfo_width())
     
    canvas.bind("<Configure>",canvas_configure)

    def frame_configure(event,me=frame,canvas=canvas):
        canvas.config(scrollregion="0 0 %s %s" % (me.winfo_reqwidth(), me.winfo_reqheight()))
        if me.winfo_reqwidth() != canvas.winfo_width(): canvas.config(width=me.winfo_reqwidth())
        if me.winfo_reqheight() > 340: canvas.config(height=340)
        else: canvas.config(height=me.winfo_reqheight())

    frame.bind("<Configure>",frame_configure)

    # -------------- Create the entries ------------------------------------

    def container(parent):
        for i in range(100):
            entry = tk.Entry(parent)
            entry.delete(0,'end')
            entry.insert(0,"Eintrag "+str(i+1))
            entry.pack()

    container(frame)
    
container(root)
    
root.mainloop()
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

hey, danke alfons.
ich möchte eine tabelle scrollen können, die größer ist, als der bildschirm anzeigen kann.
ich habe eine tabelle mit entries, deren layout ich so wie sie ist (mit entries) behalten will.
die ursprünglichen entries in einem normalen Tkinter-fenster sehen einfach besser aus. ich weiß auch nicht, ob man die frame mit den entries an das
vorherige entrie aussehen anpassen kann. die ürsprünglichen entries machen sich vom aussehen
einfach total gut in der tabelle.
wo finde ich den so ein GUI-Rahmenwerk mit (vernünftigen) ursprünglichen entries?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@ DMD Hier wäre etwa tktable: https://github.com/dossan/tktable
BlackJack

@DMD: Ob Du die Entries in das Hauptfenster oder in ein `Frame` steckst ist vom aussehen her egal.

Die anderen GUI-Rahmenwerke haben hier jeweils ein eigenes Unterforum.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@DMD Kannst Dir natürlich auch überlegen, das vertikale Scrolling noch um horizontales zu erweitern.
Antworten