Scroll-"Frame" mit internen Frames
Verfasst: Freitag 10. Juli 2020, 08:56
Hallo,
ich möchte ein scrollbares Frame erstellen, in welches man unter-Frames einfügen kann. Diese Frames enthalten dann weitere Widgets wie Buttons oder Labels.
Nun hab ich das soweit gebracht, dass es mit mehreren Frames mit jeweils zwei Buttons funktioniert:
Leider kann ich hier kein Bild hochladen um es zu veranschaulichen, aber es funktioniert mit jeweils zwei Buttons in jedem Frame.
Sobald ich aber anstatt zwei buttons zusätzlich noch ein Label auf die selbe Weise einfügen will (siehe auskommentierte Linien im Code) kommt die folgende Fehlermeldung:
"_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid"
hier der Code:
ich möchte ein scrollbares Frame erstellen, in welches man unter-Frames einfügen kann. Diese Frames enthalten dann weitere Widgets wie Buttons oder Labels.
Nun hab ich das soweit gebracht, dass es mit mehreren Frames mit jeweils zwei Buttons funktioniert:
Leider kann ich hier kein Bild hochladen um es zu veranschaulichen, aber es funktioniert mit jeweils zwei Buttons in jedem Frame.
Sobald ich aber anstatt zwei buttons zusätzlich noch ein Label auf die selbe Weise einfügen will (siehe auskommentierte Linien im Code) kommt die folgende Fehlermeldung:
"_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid"
hier der Code:
Code: Alles auswählen
import tkinter as tk
from tkinter import Tk, RIGHT, BOTH, X, RAISED, GROOVE, YES, messagebox, Canvas
from tkinter import ttk
import traceback
class Window(tk.Frame):
def __init__(self, aMaster):
tk.Frame.__init__(self, aMaster)
self.master = aMaster
self.framelist = []
self.master.title("Web tracer")
container = ttk.Frame(aMaster)
canvas = tk.Canvas(container)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview)
frame = ttk.Frame(canvas)
frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(15):
self.placeFrame(frame, i, "Button" + str(i)).pack()
container.pack()
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
def placeFrame(self, aMaster, aRow, atext):
frame = ttk.Frame(aMaster)
button = ttk.Button(frame, text=atext + '-1')
button.grid(row=aRow, column=0, padx='1', pady='1')
button2 = ttk.Button(frame, text=atext + '-2')
button2.grid(row=aRow, column=1, padx='1', pady='1')
#label = ttk.Label(text=atext)
#label.grid(row=aRow, column=2, padx='1', pady='1')
return frame
def main():
root = tk.Tk()
app = Window(root)
root.mainloop()
if __name__ == '__main__':
main()