From 76568a3f1ead5530a11969685e3374b09ec345f9 Mon Sep 17 00:00:00 2001 From: "lb@lb520" Date: Tue, 3 Apr 2018 12:01:36 +0200 Subject: [PATCH] python3 adaptations --- pysollib/kivy/LApp.py | 75 ++++++++++++++++++++++++------------- pysollib/kivy/menubar.py | 4 +- pysollib/kivy/selectgame.py | 10 ++--- pysollib/kivy/tkcanvas.py | 2 +- pysollib/kivy/tkhtml.py | 2 +- pysollib/kivy/toolbar.py | 6 +-- pysollib/pysolaudio.py | 2 +- 7 files changed, 63 insertions(+), 38 deletions(-) diff --git a/pysollib/kivy/LApp.py b/pysollib/kivy/LApp.py index 45746930..de09730b 100644 --- a/pysollib/kivy/LApp.py +++ b/pysollib/kivy/LApp.py @@ -65,6 +65,20 @@ from kivy.cache import Cache def get_platform(): return platform +# ============================================================================= +# kivy EventDispatcher passes keywords, that to not correspond to properties +# to the base classes. Finally they will reach 'object'. With python3 (but not +# python2) 'object' throws an exception 'takes no parameters' in that a +# situation. We therefore underlay a base class (right outside), which +# swallows up remaining keywords. Thus the keywords do not reach 'object' any +# more. + + +class LBase(object): + def __init__(self, **kw): + super(LBase, self).__init__() + + # ============================================================================= @@ -146,7 +160,7 @@ LSoundLoader = SoundLoader # ============================================================================= -class LBoxLayout(BoxLayout): +class LBoxLayout(BoxLayout, LBase): def __init__(self, **kw): super(LBoxLayout, self).__init__(**kw) @@ -159,7 +173,7 @@ class LBoxLayout(BoxLayout): # ============================================================================= -class LImage(KivyImage): +class LImage(KivyImage, LBase): def __init__(self, **kwargs): super(LImage, self).__init__(**kwargs) @@ -278,7 +292,7 @@ def LColorToKivy(outline): # ============================================================================= -class LText(Widget): +class LText(Widget, LBase): text = StringProperty('') def __init__(self, canvas, x, y, **kwargs): @@ -306,8 +320,13 @@ class LText(Widget): # print('LText: font = %s, font_size = %s' % (font, fontsize)) # print('LText: text = %s' % (self.text)) - self.label = Label(font=font, font_size=fontsize, **kwargs) - # self.label = Label(font=font, font_size=fontsize) + kwargs['font'] = font + kwargs['font_size'] = fontsize + + class MyLabel(Label, LBase): + pass + + self.label = MyLabel(**kwargs) self.label.texture_update() self.coreSize = self.label.texture_size self.corePos = (x, y) @@ -354,7 +373,7 @@ class LEvent(object): # ============================================================================= -class LLine(Widget): +class LLine(Widget, LBase): def __init__(self, canvas, args, **kw): super(LLine, self).__init__(**kw) @@ -527,7 +546,7 @@ class LLine(Widget): # ============================================================================= -class LRectangle(Widget): +class LRectangle(Widget, LBase): def __init__(self, prnt, args, **kw): super(LRectangle, self).__init__(**kw) self.prnt = prnt @@ -638,7 +657,7 @@ class LRectangle(Widget): # ============================================================================= -class LImageItem(BoxLayout): +class LImageItem(BoxLayout, LBase): def __init__(self, **kw): super(LImageItem, self).__init__(**kw) self.game = None @@ -780,13 +799,13 @@ class LImageItem(BoxLayout): # Treeview -class LTreeRoot(TreeView): +class LTreeRoot(TreeView, LBase): def __init__(self, **kw): super(LTreeRoot, self).__init__(**kw) self.kw = kw -class LTreeNode(ButtonBehavior, TreeViewLabel): +class LTreeNode(ButtonBehavior, TreeViewLabel, LBase): # def __init__(self, gameview, **kw): def __init__(self, **kw): @@ -941,7 +960,7 @@ class LTreeNode(ButtonBehavior, TreeViewLabel): # ============================================================================= -class LTopLevelContent(BoxLayout): +class LTopLevelContent(BoxLayout, LBase): def __init__(self, **kw): super(LTopLevelContent, self).__init__(**kw) @@ -962,7 +981,7 @@ class LTopLevelContent(BoxLayout): # ============================================================================= -class LTopLine(ButtonBehavior, Label): +class LTopLine(ButtonBehavior, Label, LBase): def __init__(self, **kw): super(LTopLine, self).__init__(**kw) @@ -985,10 +1004,11 @@ class LTopLine(ButtonBehavior, Label): # ============================================================================= -class LTopLevel0(BoxLayout): +class LTopLevel0(BoxLayout, LBase): def __init__(self, top, title=None, **kw): self.main = top - super(LTopLevel0, self).__init__(orientation="vertical", **kw) + super(LTopLevel0, self).__init__( + orientation="vertical", **kw) # self.canvas.add(Color(0, 1, 0, 0.4)) # self.canvas.add(Rectangle(pos=(100, 100), size=(100, 100))) @@ -1024,10 +1044,11 @@ class LTopLevel0(BoxLayout): # ============================================================================= -class LTopLevel(BoxLayout): +class LTopLevel(BoxLayout, LBase): def __init__(self, parent, title=None, **kw): self.mainwindow = parent - super(LTopLevel, self).__init__(orientation="vertical", **kw) + super(LTopLevel, self).__init__( + orientation="vertical", **kw) if ('size_hint' not in kw): self.size_hint = (0.5, 1.0) @@ -1044,7 +1065,7 @@ class LTopLevel(BoxLayout): # class LMenuBar(ActionBar): -class LMenuBar(BoxLayout): +class LMenuBar(BoxLayout, LBase): def __init__(self, **kw): super(LMenuBar, self).__init__(**kw) self.menu = None @@ -1071,14 +1092,18 @@ class LMenuBar(BoxLayout): # ============================================================================= -class LMenu(ActionView): +class LMenu(ActionView, LBase): def __init__(self, prev, **kw): - print('prev = %s, kw = %s' % (prev, kw)) super(LMenu, self).__init__(**kw) - self.ap = ap = ActionPrevious( - with_previous=prev, size_hint=(.01, 1), **kw) - ap.app_icon = 'data/images/misc/pysol01.png' - self.add_widget(ap) + + class MyActionPrev(ActionPrevious, LBase): + pass + + kw['app_icon'] = 'data/images/misc/pysol01.png' + kw['with_previous'] = prev + kw['size_hint'] = (.01, 1) + self.ap = MyActionPrev(**kw) + self.add_widget(self.ap) self.bar = None self.uppermenu = None @@ -1131,7 +1156,7 @@ class LMenu(ActionView): # ============================================================================= -class LMenuItem(ActionButton): +class LMenuItem(ActionButton, LBase): def __init__(self, menu, **kw): super(LMenuItem, self).__init__(**kw) @@ -1175,7 +1200,7 @@ class LMenuItem(ActionButton): # ============================================================================= -class LScrollView(ScrollView): +class LScrollView(ScrollView, LBase): def __init__(self, **kw): super(LScrollView, self).__init__(**kw) self.delayDown = False diff --git a/pysollib/kivy/menubar.py b/pysollib/kivy/menubar.py index d3c9483e..de2aa72d 100644 --- a/pysollib/kivy/menubar.py +++ b/pysollib/kivy/menubar.py @@ -940,12 +940,12 @@ class OptionsMenuDialog(LMenuDialog): if rg: self.addRadioNode(tv, rg, 'Drag-and-Drop', - self.menubar.tkopt.mouse_type, u'drag-n-drop', + self.menubar.tkopt.mouse_type, 'drag-n-drop', self.menubar.mOptMouseType) self.addRadioNode(tv, rg, 'Point-and-Click', - self.menubar.tkopt.mouse_type, u'point-n-click', + self.menubar.tkopt.mouse_type, 'point-n-click', self.menubar.mOptMouseType) # sinnlos mit touch-device: diff --git a/pysollib/kivy/selectgame.py b/pysollib/kivy/selectgame.py index 61dbee6b..56088366 100644 --- a/pysollib/kivy/selectgame.py +++ b/pysollib/kivy/selectgame.py @@ -60,7 +60,6 @@ class SelectGameNode(SelectDialogTreeNode): node = SelectGameLeaf(self.tree, self, name, key=id) contents.append(node) else: - # for gi in self.tree.data.all_games_gi: for gi in self.tree.all_games_gi: if gi and self.select_func is None: # All games @@ -72,7 +71,7 @@ class SelectGameNode(SelectDialogTreeNode): name = gi.name node = SelectGameLeaf(self.tree, self, name, key=gi.id) contents.append(node) - return contents or self.tree.data.no_games + return contents or self.tree.no_games # ************************************************************************ @@ -84,7 +83,8 @@ class SelectGameData(SelectDialogTreeData): SelectDialogTreeData.__init__(self) # originale. - self.all_games_gi = map(app.gdb.get, app.gdb.getGamesIdSortedByName()) + self.all_games_gi = list( + map(app.gdb.get, app.gdb.getGamesIdSortedByName())) self.no_games = [SelectGameLeaf(None, None, _("(no games)"), None), ] # s_by_type = s_oriental = s_special = None @@ -191,7 +191,7 @@ class SelectGameData(SelectDialogTreeData): ul_alternate_names = UserList( list(app.gdb.getGamesTuplesSortedByAlternateName())) # - self.rootnodes = filter(None, ( + self.rootnodes = [_f for _f in ( # SelectGameNode(None, _("All Games"), None), SelectGameNode(None, _("Popular Games"), lambda gi: gi.si.game_flags & GI.GT_POPULAR), @@ -280,7 +280,7 @@ class SelectGameData(SelectDialogTreeData): )), s_original, s_contrib, - )) + ) if _f] # ************************************************************************ diff --git a/pysollib/kivy/tkcanvas.py b/pysollib/kivy/tkcanvas.py index f050a028..c6c02355 100644 --- a/pysollib/kivy/tkcanvas.py +++ b/pysollib/kivy/tkcanvas.py @@ -209,7 +209,7 @@ class MfxCanvasImage(object): self.addtag(group) def __del__(self): - print('MfxCanvasImage: __del__()') + print('MfxCanvasImage: __del__(%s)' % self.image) self.canvas.clear_widgets([self.image]) def config(self, **kw): diff --git a/pysollib/kivy/tkhtml.py b/pysollib/kivy/tkhtml.py index fc2e07fd..9cc0851d 100644 --- a/pysollib/kivy/tkhtml.py +++ b/pysollib/kivy/tkhtml.py @@ -594,7 +594,7 @@ class HTMLViewer: writer = tkHTMLWriter(self.text, self, self.app) fmt = formatter.AbstractFormatter(writer) parser = tkHTMLParser(fmt) - parser.feed(data) + parser.feed(str(data)) parser.close() self.text.config(state="disabled") if 0.0 <= xview <= 1.0: diff --git a/pysollib/kivy/toolbar.py b/pysollib/kivy/toolbar.py index 3bdda453..e3082567 100644 --- a/pysollib/kivy/toolbar.py +++ b/pysollib/kivy/toolbar.py @@ -66,6 +66,7 @@ class AbstractToolbarButton: if True: from pysollib.kivy.LApp import LImage + from pysollib.kivy.LApp import LBase # from LApp import LMainWindow from kivy.uix.boxlayout import BoxLayout # from kivy.uix.button import Button @@ -76,7 +77,7 @@ if True: # ************************************************************************ -class MyButton(ButtonBehavior, KivyImage): +class MyButton(ButtonBehavior, KivyImage, LBase): def __init__(self, **kwargs): super(MyButton, self).__init__(**kwargs) # super(MyButton, self).__init__() @@ -98,7 +99,7 @@ class MyButton(ButtonBehavior, KivyImage): self.command() -class MyCheckButton(ButtonBehavior, KivyImage): +class MyCheckButton(ButtonBehavior, KivyImage, LBase): def __init__(self, **kwargs): super(MyCheckButton, self).__init__(**kwargs) # super(MyCheckButton, self).__init__() @@ -277,7 +278,6 @@ class PysolToolbarTk(BoxLayout): bd = TkSettings.toolbar_button_borderwidth padx, pady = TkSettings.toolbar_button_padding kw = { - # 'position' : position, 'toolbar': self, 'toolbar_name': name, 'command': command, diff --git a/pysollib/pysolaudio.py b/pysollib/pysolaudio.py index 0f15c738..fed70348 100644 --- a/pysollib/pysolaudio.py +++ b/pysollib/pysolaudio.py @@ -269,7 +269,7 @@ class KivyAudioClient(AbstractAudioClient): def __init__(self): AbstractAudioClient.__init__(self) - from kivy.LApp import LSoundLoader + from pysollib.kivy.LApp import LSoundLoader self.audiodev = LSoundLoader self.sound = None self.queue = []