Hallo Costi
Um dein Codesnippet zu testen habe ich noch ein wenig Code hinzugefügt. Ich habe ein Canvas-Objekt, welches ich mit deiner Klasse frisieren möchte. Scheint bei mir nicht zu funktionieren. Eventuell verstehe ich es nicht oder mache etwas falsch. Vielleicht kannst du mir helfen.
Hier ist meine Code-Erweiterung:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
import Tkinter as tk
class Scrolling(object):
"""argument must be a tkinter widget
returns the given widget with a scrollbar on the right side"""
def __new__(self, Widget):
class Tmp(Widget):
def __init__(self, root, **kw):
frm = Frame(root)
Widget.__init__(self, frm, **kw)
scrollbar = Scrollbar(frm)
self.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=self.yview)
self.pack(side=LEFT, expand=YES, fill=BOTH)
scrollbar.pack(side=RIGHT, fill=Y)
self.pack = frm.pack
self.grid = frm.grid
return Tmp
#~~ Lade den Dateiname dieses Skriptes
script_name = sys.argv[0]
#~~ Konstanten für die Abmessungen des Hauptfensters
MAIN_WIN_XPOS = 0
MAIN_WIN_YPOS = 0
MAIN_WIN_WIDTH = 320
MAIN_WIN_HEIGHT = 320
#--- Erstelle ein Tk-Hauptfenster ----
root = tk.Tk()
root.geometry("%dx%d+%d+%d" % (
MAIN_WIN_WIDTH,
MAIN_WIN_HEIGHT,
MAIN_WIN_XPOS,
MAIN_WIN_YPOS)
)
root['bg'] = 'steelblue2'
script_name = 'Toplevel-Instanzen'
root.title(script_name)
canvas = tk.Canvas(root,
)
canvas.place(x=20,y=20,width=200,height=200)
scrolling_widget = Scrolling(canvas)
root.mainloop()
Hier ist die Fehlermeldung:
Traceback (most recent call last):
File "scrollbar_widget_bind.py", line 51, in ?
scrolling_widget = Scrolling(canvas)
File "scrollbar_widget_bind.py", line 11, in __new__
class Tmp(Widget):
TypeError: Error when calling the metaclass bases
__init__() takes at most 3 arguments (4 given)
spy@linux:~/Documents/python_download/scrollbar_widget_bind>
Gruss wuf
