Я создаю приложение с использованием Custom Tkinter, и в этом приложении я хочу создать кнопки на основе файлов .txt в папке и заставить кнопки копировать содержимое этих файлов .txt. Простые кнопки копирования/вставки.
Этот класс для кнопок ОТЛИЧНО работал на моем Mac, но теперь в Windows он выдает ошибку.
Я проверил несколько обсуждений, но безуспешно. пример попробовал "encoding="utf-8"", не сработало.
class CopyPaste(customtkinter.CTkScrollableFrame):
def __init__(self, master):
super().__init__(master)
global counter
counter = 1
self.Header = customtkinter.CTkLabel(self, text = "Template Answers",
font=("Arial", 20))
self.Header.grid(row=0, column=0, padx=10, pady=10, sticky = "w")
target_directory = "C:/ToolKit Files"
def read_file(file_path):
with open(file_path, "r") as file:
content = file.read()
return content
def create_button(self, file_path):
file_name = os.path.basename(file_path)
def on_button_click():
pyperclip.copy(read_file(file_path))
button = customtkinter.CTkButton(self, text=file_name, command=on_button_click)
button.grid(row=counter, column=0, padx=10, pady=5)
def create_buttons(self, target_directory):
file_names = [file for file in os.listdir(target_directory) if file.endswith('.txt')]
for file_name in file_names:
global counter
file_path = os.path.join(target_directory, file_name)
create_button(self, file_path)
counter += 1
create_buttons(self, target_directory)
После запуска этого скрипта я получаю:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\USER\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "C:\Users\USER\PycharmProjects\SidekickToolKit\venv\lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 554, in _clicked
self._command()
File "C:\Users\USER\PycharmProjects\SidekickToolKit\main.py", line 162, in on_button_click
pyperclip.copy(read_file(file_path))
File "C:\Users\USER\PycharmProjects\SidekickToolKit\main.py", line 154, in read_file
content = file.read()
File "C:\Users\USER\AppData\Local\Programs\Python\Python39\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 448: character maps to <undefined>
Помощь очень ценится :D
@fastattack Привет! Спасибо, хотя я пробовал менять содержимое файлов, но теперь все равно не копируются файлы, а просто пустая копия... :( Как поменять кодировщик чтения файлов? Спасибо большое!






ваш код выглядит нормально, я думаю, что еще нужно сделать, что вызывает ошибку, UnicodeDecodeErrortraceback is for you to tell Python theencoding`, которую нужно использовать для чтения файла.
Вот обновление вашего кода:
def read_file(file_path):
# wrap the entire code snippet in a try-catch block
try:
with open(file_path, "r", encoding = "utf-8") as file:
content = file.read()
return content
# catch the error if any
except UnicodeDecodeError:
return f'Error reading file {file}.'
Я считаю, что ваш код теперь должен работать, поскольку вы установили кодировку utf-8. Если кодировка, установленная на utf-8, не работала после того, как вы обновили свою операционную систему, хотя я использую Linux, вы можете установить это — errors='ignore' туда, где мы поместили параметр кодировки. Удачи, приятель.
Привет. Спасибо за это! Теперь он работает лучше, но я также понял, что он создает по 2 кнопки для каждого текстового файла. первый набор кнопок называется «._FileName.txt» и выдает ошибку, а другой набор кнопок называется «FileName.txt» (правильный способ, и они работают). Почему это может быть? Кажется, цикл «Создание кнопок» выполняется дважды с разными результатами?
Привет @Kooritsmani, пожалуйста, отметьте ответ как правильный, поскольку он решил вашу первоначальную проблему, чтобы, если у кого-то, у кого есть подобная задача, основанная на вашем названии, можно было легко следовать ответу и решить возникшую у него проблему. По этому второму вопросу, который вы задали, пожалуйста, создайте еще одну проблему или вопросы по нему, поскольку он не является частью исходного вопроса, тогда я постараюсь изо всех сил, или любой другой питонист сможет вам ответить. Я желаю вам всего наилучшего.
Большое спасибо! Теперь все работает блестяще :) Ура! @blaisemart
С моей стороны все работает отлично. Я думаю, что один из символов, которые вы ввели в один из файлов .txt, не может быть прочитан Python. Попробуйте изменить кодировщик, читающий файлы, или попробуйте изменить содержимое файлов .txt.