У меня есть функция, которая создает две глобальные переменные при импорте. Другая функция преобразует эти переменные в 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