я только что взял проект на питоне через год, и я хотел перестроить его с помощью 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)
Если вы хотите указать начальное значение при создании объекта Tkinter Var, это второй параметр, который чаще записывается как параметр ключевого слова value=
. Первый параметр — это виджет (по умолчанию корневое окно), который косвенно указывает экземпляр Tk()
, которому принадлежит Var.
tkinter.IntVar()
уже имеет значение по умолчанию 0
. В документации говорится следующее об аргументах, которые может принимать tkinter.IntVar()
:
tkinter.IntVar (мастер = Нет, значение = Нет, имя = Нет)
Поскольку master
идет первым, и вы предоставили 0
в качестве первого позиционного аргумента, он считает, что это аргумент master
. Что вы хотите сделать, так это указать аргумент value
. Вот так:
radio_var = tkinter.IntVar(value=0)
Вы пробовали
customtkinter.IntVar
? Поскольку вы не создали корень Tk, библиотека не была инициализирована.