@Sirius3: Besten Dank für deine Antwort. Deine Funktion erfüllt die Aufteilung der Optionen in die beiden Dictionaries. Habe dies mit folgendem Skript ausprobiert:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
class MyOwnWidget(object):
SPECIFIC_OPTIONS = ('horizontal_scroll', 'vertical_scroll')
def __init__(self, **kwargs):
self.specific_options, self.standard_options = self.split_dict(
kwargs, self.SPECIFIC_OPTIONS)
print('Standard Optionen:\n', self.standard_options)
print()
print('Specific Optionen:\n', self.specific_options)
def split_dict(self, dict, keys):
keys, dict_keys = set(keys), set(dict)
this = {k: dict[k] for k in dict_keys & keys}
others = {k: dict[k] for k in dict_keys - keys}
return this, others
app_win = tk.Tk()
my_own_widget = MyOwnWidget(bg=0, highlightthickness=0, vertical_scroll=True,
horizontal_scroll=True)
app_win.mainloop()
Sorry ich habe mich zu wenig genau ausgedrückt. Was ich eigentlich will ist eine eigene Tk-Widget-Klasse erstellen. Diese setzt sich aus einem Standard Tk-Widget z.B. Canvas und eigenen Erweiterungen zusammen. Darum die üppige Zugabe des tk-Templates. Die Optionen für meine Widget-Klasse setzen sich zusammen aus den Standard Tk-Optionen für das Canvas-Widget und eigenen Optionen. Für die Initialisierung der Klasse werden alle mit **kwargs übernommen. In meiner Klasse sind die beiden Wörterbücher
standard_options und
specific_options mit Vorgabeoptionen belegt. Bei einem einfachen Einsatz meiner Klasse genügen diese Vordefinierten Optionen. Erst beim Einsatz mit einer spezifischer Konfiguration werden zusätzliche Optionen übergeben. Dann muss ein update der beiden Wörterbücher erfolgen. Dabei darf das Wörterbuch
standard_options nur Optionen enthalten, welche für das Canvas bestimmt sind und die Optionen für meine eigene Erweiterungen dürfen nur im Wörterbuch
specific_options erscheinen. Darum müssen die Optionen, welche nicht für das Canvas bestimmt aus dem kwargs entfernt werden bevor damit das Wörterbuch
standard_options updated wird.
Hier mein erweitertes Testskript:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
class MyOwnWidget(tk.Canvas):
SPECIFIC_OPTIONS = ('horizontal_scroll', 'vertical_scroll')
def __init__(self, **kwargs):
self.standard_options = {
'bd' : 0,
'highlightthickness': 0
}
self.specific_options = {
'horizontal_scroll' : False,
'vertical_scroll' : False
}
spec_options = [key for key in kwargs if key in self.SPECIFIC_OPTIONS]
temp_dict = dict()
for key in spec_options:
temp_dict[key] = kwargs[key]
del kwargs[key]
self.standard_options.update(kwargs)
self.specific_options.update(temp_dict)
print('Standard Optionen:\n', self.standard_options)
print()
print('Specific Optionen:\n', self.specific_options)
tk.Canvas.__init__(self, app_win, **self.standard_options)
# My own options
horzontal_scroll = self.specific_options['horizontal_scroll']
vertical_scroll = self.specific_options['vertical_scroll']
print('\nHorizontal Scroll:', horzontal_scroll)
print('Verical Scroll :', vertical_scroll)
app_win = tk.Tk()
my_own_widget = MyOwnWidget(bd=0, highlightthickness=0, bg='steelblue',
vertical_scroll=True, horizontal_scroll=True)
my_own_widget.pack(fill='both', expand=True)
app_win.mainloop()
OK Sirius3 ich hoffe du verstehst auf was ich aus bin.
Gruss wuf