Python customtkinter AttributeError: объект «int» не имеет атрибута «_root»

я только что взял проект на питоне через год, и я хотел перестроить его с помощью customtkinter, используя документацию. Вот код:

import customtkinter
import tkinter
from pytube import YouTube
from PIL import Image

customtkinter.set_appearance_mode("system")
customtkinter.set_default_color_theme("blue")

app = customtkinter.CTk()
app.geometry("800x760")
app.title("YouTube Unlocked")

logo = customtkinter.CTkImage(dark_image=Image.open("G:\\ytdownloader\\assets\\icon.png"), size=(260,190))
logoDisplay = customtkinter.CTkLabel(app, text = "", image=logo)
logoDisplay.pack(padx=10, pady=10)

linkLabel = customtkinter.CTkLabel(app, text = "Video link", font=("Arial", 15))
linkLabel.pack(padx=10, pady=10)

linkTextbox = customtkinter.CTkEntry(app, width=400)
linkTextbox.pack(padx=10, pady=10)

radio_var = tkinter.IntVar(0)
radiobutton_1 = customtkinter.CTkRadioButton(app, text = "Video", variable=radio_var, value=1)
radiobutton_2 = customtkinter.CTkRadioButton(app, text = "Audio", variable=radio_var, value=2)
radiobutton_1.pack(padx=10, pady=10)
radiobutton_2.pack(padx=10, pady=10)

app.mainloop()

Но после написания кода переключателей (всегда из документации) я получил эту ошибку:

Traceback (most recent call last):
  File "g:\ytdownloader\main.py", line 23, in <module>
    radio_var = tkinter.IntVar(0)
  File "C:\Users\gp_ga\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 564, in __init__
    Variable.__init__(self, master, value, name)
  File "C:\Users\gp_ga\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 372, in __init__
    self._root = master._root()
AttributeError: 'int' object has no attribute '_root'

Есть ли способ исправить это? Спасибо! (кстати, если это плохой английский, я хочу, чтобы вы знали, что я использую Google Translate)

Вы пробовали customtkinter.IntVar? Поскольку вы не создали корень Tk, библиотека не была инициализирована.

Tim Roberts 12.04.2023 20:41

Если вы хотите указать начальное значение при создании объекта Tkinter Var, это второй параметр, который чаще записывается как параметр ключевого слова value=. Первый параметр — это виджет (по умолчанию корневое окно), который косвенно указывает экземпляр Tk(), которому принадлежит Var.

jasonharper 12.04.2023 20:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

tkinter.IntVar() уже имеет значение по умолчанию 0. В документации говорится следующее об аргументах, которые может принимать tkinter.IntVar():

tkinter.IntVar (мастер = Нет, значение = Нет, имя = Нет)

Поскольку master идет первым, и вы предоставили 0 в качестве первого позиционного аргумента, он считает, что это аргумент master. Что вы хотите сделать, так это указать аргумент value. Вот так:

radio_var = tkinter.IntVar(value=0)

Другие вопросы по теме