Да, проблема, с которой вы сталкиваетесь, заключена в порядке использования и определения переменной. Когда вы объявляете переменную `priceshop`, но при этом обращаетесь к ней в функции `auto_price` до её инициализации, Python выдает ошибку `NameError`.
Переменные, объявленные внутри функции, являются локальными для этой функции и не доступны за её пределами, если вы не объявите их как глобальные. Однако в вашем случае, `priceshop` не инициализирована, когда вы пытаетесь обратиться к ней в `auto_price`, поэтому Python не может её распознать, даже если вы написали `global priceshop`.
Чтобы решить эту проблему, убедитесь, что вы инициализируете `priceshop` до того, как вы начнёте её использовать. Например:
1. Объявите переменную `priceshop` в глобальной области видимости перед использованием в функции.
2. Инициализируйте её после создания виджета `Label`.
Вот как это может выглядеть:
```python
# Создаем основное окно
window = Tk()
# Переменная для хранения виджета текста цены
priceshop = None
# Вызов магазина
def shop():
global pricePB_int
global pricePB_str
global priceshop
wshop = Toplevel()
wshop.resizable(False, False)
wshop.title("Магазин")
shopx = window.winfo_x() + ((window.winfo_width() / 2) - 320)
shopy = window.winfo_y() + ((window.winfo_height() / 2) - 240)
wshop.geometry('%dx%d+%d+%d' % (240, 144, shopx, shopy))
wshop.iconbitmap('icon.ico') # Убедитесь, что у вас есть этот файл
# Создаем Label для цены и сохраняем в priceshop
priceshop = Label(wshop, text="Цена: " + str(pricePB_str))
priceshop.pack() # Убедитесь, что виджет отображается в окне
# Остальная часть вашего кода...
```
Теперь, когда вы вызовете `auto_price()`, `priceshop` будет уже инициализирован. Это должно устранить ошибку `NameError`.
Обратите внимание, что структура кода должна быть последовательной, и любые глобальные переменные должны инициализироваться до их использования в функциях.