Импорт нескольких модулей, содержащих идентично названных классов в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Импорт нескольких модулей, содержащих идентично названных классов в Python

Сообщение Anonymous »

Я хотел бы импортировать дополнительные элементы графического интерфейса, определенные в отдельных файлах .py, и добавлять/удалить их динамически из основного графического интерфейса. Необязательные элементы определяются в файле текстовой конфигурации, и поэтому имена файлов не известны заранее. Моя первоначальная идея состояла в том, чтобы навязать общий формат - основной класс будет идентично назван во всех файлах модулей. Я обнаружил, что простая реализация этого ведет себя неожиданным образом. Хотя импортируемые объекты, по-видимому, имеют различные имена, на самом деле есть перекрестные разговоры. Это демонстрирует проблему и обходной путь, который я нашел в SE (прокомментировано): < /p>

Код: Выделить всё

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.lang import Builder
import importlib

Builder.load_string('''
:
orientation: 'vertical'
BoxLayout:
Button:
text: "Load Mod 1"
on_press:
root.load_module(self.text)
Button:
text: "Load Mod 2"
on_press:
root.load_module(self.text)
Button:
text: "Unload all"
on_press:
dock.clear_widgets()
FloatLayout:
id: dock
''')

class MainWidget(BoxLayout):

def load_module(self, hint):

self.ids.dock.clear_widgets()

if "1" in hint:
self.module = importlib.import_module("Mod1").Module()#PROBLEMATIC
#module = importlib.import_module("Mod1")
#class_ = getattr(module, "Module1")
#self.module = class_()
if "2" in hint:
self.module = importlib.import_module("Mod2").Module()#PROBLEMATIC
#module = importlib.import_module("Mod2")
#class_ = getattr(module, "Module2")
#self.module = class_()

self.ids.dock.add_widget(self.module)

class MyApp(App):
def build(self):
return MainWidget()

if __name__ == '__main__':
MyApp().run()
< /code>
Mod1.py
:

Код: Выделить всё

from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''
#:
: #PROBLEMATIC
size_hint: None, None
size: self.parent.size if self.parent else self.size
pos: self.parent.pos if self.parent else self.pos
Button:
size_hint: None, None
width: self.parent.width / 3
height: self.parent.height
pos: self.parent.pos
text: "Mod 1"
on_press: print(root); print([x for x in dir(root) if 'method' in str(x)])
''')

#class Module1(FloatLayout):
class Module(FloatLayout): #PROBLEMATIC

def __init__(self, **kwargs):
super(FloatLayout, self).__init__(**kwargs)

def dummymethod1(self):
pass
< /code>
Mod2.py
:

Код: Выделить всё

from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''
#:
: #PROBLEMATIC
size_hint: None, None
size: self.parent.size if self.parent else self.size
pos: self.parent.pos if self.parent else self.pos
Button:
size_hint: None, None
width: self.parent.width / 3
height: self.parent.height
pos: (self.parent.x + self.parent.width / 2) , self.parent.y
text: "Mod 2"
on_press: print(root); print([x for x in dir(root) if 'method' in str(x)])
''')

#class Module2(FloatLayout):
class Module(FloatLayout): #PROBLEMATIC

def __init__(self, **kwargs):
super(FloatLayout, self).__init__(**kwargs)

def dummymethod2(self):
pass
< /code>
It appears that although the modules have distinct names Mod1
и mod2 , основной класс, имеющий одинаковое имя, является проблемой. Как только оба модуля были импортированы, по крайней мере, один раз, оба появляются в графическом интерфейсе, независимо от того, какой человек на самом деле активирован. Это связано с тем, как работает импорт в Python в целом, или конкретной проблемой Kivy? Есть ли другой способ справиться с этим, который позволил бы устроить классы имены в других различных модулях?

Подробнее здесь: https://stackoverflow.com/questions/795 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Импорт нескольких модулей, содержащих идентично названных классов в Python
    Гость » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Гость
  • Jython для импорта «идентично названных» файлов Java, проживающих в разных каталогах
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • From... импорт ИЛИ импорт... что касается модулей
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Общий импорт Python для импорта нескольких модулей
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Передача двух названных труб в качестве входных данных в FFMPEG с использованием Python
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»