Глобальная переменная модуля не меняется после импорта [дубликат]Python

Программы на Python
Anonymous
Глобальная переменная модуля не меняется после импорта [дубликат]

Сообщение Anonymous »

У меня есть функция, которая создает две глобальные переменные при импорте. Другая функция преобразует эти переменные в IntVars, но не обновляет их для кода, использующего модуль.
AliasTkFunctions содержит этот код, который должен устанавливать переменные, а затем заменять их на IntVars. :
rows_ = None
columns_ = None

def initiate_grid(window):
from tkinter import IntVar
global rows_, columns_

rows_ = IntVar()
rows_.trace("w", lambda *_: [window.rowconfigure(a, weight=1) for a in range(rows_.get())])

columns_ = IntVar()
columns_.trace("w", lambda *_: [window.columnconfigure(a, weight=1) for a in range(columns_.get())])

print("Initiate Grid")

def grid(window, rows=None, columns=None, clear=True):
global rows_, columns_

if clear:
[b.destroy() for b in window.winfo_children()]

if rows is not None:
rows_.set(rows)

if columns is not None:
columns_.set(columns)

print("Grid Changed")

Этот код должен установить сетку 5x5 и заполнить каждый квадрат квадратом случайного цвета:
from tkinter import Tk, Label

from AliasTkFunctions import fix_resolution_issue, resize_window, initiate_grid, grid
from AliasColourFunctions import random_hex_colour

fix_resolution_issue()

main = Tk()
resize_window(main, 4, 4, False)
main.resizable(False, False)
main.title("Placeholder")

initiate_grid(main)
grid(main, 5, 5)

for c in range(columns_.get() + 1):
for r in range(rows_.get()):
Label(background=random_hex_colour()).grid(row=r, column=c, sticky="nsew")

С помощью этого кода выдается следующая ошибка:
Traceback (most recent call last):
File "C:\Users\dandr\Code\PycharmProjects\Python Projects 2\Random Colours.py", line 16, in
for c in range(columns_.get() + 1):
^^^^^^^^
NameError: name 'columns_' is not defined
Initiate Grid
Grid Changed


Подробнее здесь: https://stackoverflow.com/questions/789 ... g-imported

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