Как передавать данные между двумя модулями в питон?
Есть класс с GUI, где GUI помогает отображать tkinter и есть класс логики. т.е. на выходе имеем.
design.py main.py
Как бы я не пытался сделать что-то типа design -> main -> design постоянно вылазят ошибки, то импорта то еще чего-нибудь.
Может, кто нибудь написать, как правильно элементарно с Enrty() передать информацию в main, там ее обработать любым методом и вернуть обратно в design в какую-нибудь Label.
Или это возможно только design - > main (сохраняем результат в файл) -> design (читаем файл)
design.py
from tkinker import *
import main
var=''
def setty():
var_m = main.m_class.getty()
var = var_m
window.Tk()
window.title('Main')
window.geomerty('400x400')
button0 = Button(window, command = setty)
lb0 = Label(window, text = var)
lb0.pack()
button0.pack()
window.mainloop()
main.py
from tkinter import *
import design
class m_class:
__init__(self):
pass
def getty():
getting = 'Hello World'
return getting
Ответы (1 шт):
На самом деле, в вашем коде проблема не с "передачей значения из класса в класс", а несколько других проблем разной степени серьёзности.
from tkinker import *
Тут у вас опечатка в слове tkinter, будет ошибка импорта
window.Tk()
Тут вы, очевидно, хотели написать window = Tk()
window.geomerty('400x400')
Опечатка в слове geometry
var=''
def setty():
var_m = main.m_class.getty()
var = var_m
Так делать нельзя. Если переменная объявлена вне функции, то нельзя просто так взять и записать в неё значение внутри функции. Это ограничение можно обойти с помощью ключевого лова global. Но лучше этого не делать, т.к. в 95% случаев использование global означает, что выбрано неудачное решение.
class m_class:
__init__(self):
pass
Пропущено def перед __init__. Ну и если у вас метод __init__ пустой, то он вообще не нужен.
Кроме того, у вас перекрёстный импорт - в main вы импортируете design, а в design - импортируете main. Так делать не надо.
На самом деле, структура вашей программы плохо продумана. Должен быть один главный запускаемый файл, в котором должен запускаться window.mainloop(), а остальные модули сами по себе ничего не должны выполнять, они должны только предоставлять ресурсы (классы и функции).
С учётом вышесказанного, я бы реализовал всё так:
design.py
from tkinter import Tk, Button, Label
class App:
def __init__(self, getty):
self.getty = getty
window = Tk()
window.title('Main')
window.geometry('400x400')
lb0 = Label(window, text='')
self.label = lb0
button0 = Button(window, command=self.setty, text='Кнопка')
lb0.pack()
button0.pack()
self.window = window
def setty(self):
var = self.getty()
self.label.config(text=var)
def run(self):
self.window.mainloop()
main.py
from design import App
class m_class:
@staticmethod
def getty():
getting = 'Hello World'
return getting
app = App(getty=m_class.getty)
app.run()
На самом деле, не самая удачная структура, но это максимально соответствует вашему вопросу.