Как установить глобальную переменную в другом модуле? - PullRequest
0 голосов
/ 09 июля 2020

Я хочу передать экземпляр (например, указатель) из моего основного модуля в другой модуль, чтобы я мог изменить значение входа моего основного модуля. В моем примере - когда пользователь нажимает кнопку, он отправляет объект по ссылке с помощью лямбда-функции, и все в порядке.

Однако в моем модуле cal c .py у меня много функций. Поэтому мне нужно прикрепить объект ввода ко всем моим кнопкам и функциям приема во втором модуле.

Есть ли простой способ передать адрес объекта ввода во второй модуль, чтобы все функции там были иметь возможность получить доступ к объекту (чтобы он был для них глобально) без необходимости явно передавать его каждой функции?

Я добавил некоторую часть своего кода. Я довольно новичок в Python.

MyApp.py

# module 1 (main)


import tkinter
import tkinter.ttk
from calc import* 


window = tkinter.Tk()

e1 = tkinter.ttk.Entry(frame5, width=62)
e1.grid()

insert7_btn = tkinter.ttk.Button(frame5, text="7", command=lambda: insert_num(7,e1))
insert7_btn.grid()

button_plus = tkinter.ttk.Button(frame5, text="+", command=lambda: memory('+',e1))
button_plus.grid()

....
....
window.mainloop()
  

cal c .py

# module 2

import tkinter          
import tkinter.ttk
import math           

def insert_num(number,e1):
    .....


def memory(operation,e1):
    ..... 
......

1 Ответ

1 голос
/ 09 июля 2020

Я предлагаю поместить все функции в calc.py внутри класса и передать e1 при создании экземпляра класса:

# calc.py

class CalcUtils:
    def __init__(self, e1):
        self.e1 = e1

    def insert_num(self, number):
        # use self.e1 here
        ...
    
    def memory(self, operation):
        # use self.e1 here
        ...

Затем в вашем основном приложении создайте экземпляр CalcUtils с e1 в качестве аргумента и использовать экземпляр для вызова требуемой функции:

import tkinter as tk
from tkinter import ttk
from calc import CalcUtils

window = tk.Tk()

e1 = ttk.Entry(window, width=62)
e1.grid()

utils = CalcUtils(e1)

insert7_btn = ttk.Button(window, text='7', command=lambda: utils.insert_num(7))
insert7_btn.grid()

button_plus = ttk.Button(window, text='+', command=lambda: utils.memory('+'))
button_plus.grid()

window.mainloop()
...