PermissionError: [Errno 13] Ошибка отказа в разрешении при использовании tkintervideo в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PermissionError: [Errno 13] Ошибка отказа в разрешении при использовании tkintervideo в Python

Сообщение Anonymous »

В настоящее время я пишу приложение Python с графическим интерфейсом Tkinter, для которого требуется возможность воспроизведения видео. Для этого я использую библиотеку tkintervideo, однако при попытке воспроизвести видео более одного раза получаю сообщение об ошибке: PermissionError: [Errno 13] Разрешение отклонено.
Это полный код приложения tkinter:

Код: Выделить всё

import customtkinter as ctk
import os
from tkintervideo import player
from tkintervideo.tools import Controls
import threading

class previewPage(ctk.CTkScrollableFrame):

def __init__(self, master, title, values, methods, *args, **kwargs):
super().__init__(master, label_text=title, *args, **kwargs)
self.grid_columnconfigure(0, weight=1)
self.values = values
self.checkboxes = []
self.buttons = []
self.str_vars = []

i = 0
for value in self.values:
self.str_vars.append(ctk.StringVar(value="on"))
checkbox = ctk.CTkCheckBox(self, text=value, variable=self.str_vars[-1], onvalue="on", offvalue="off")
checkbox.grid(row=i, column=0, padx=10, pady=(10, 0))
self.checkboxes.append(checkbox)
button = ctk.CTkButton(master=self, text=f"Video {i+1}", command=methods[i], corner_radius=8, height=40, width=100)
button.grid(row=i, column=1, padx = 10, pady=(10, 0), sticky='w')
self.buttons.append(button)
i += 1

def close(self):

for button in self.buttons:
button.grid_forget()

for checkbox in self.checkboxes:
checkbox.grid_forget()

def close(self):

for button in self.buttons:
button.grid_forget()

for checkbox in self.checkboxes:
checkbox.grid_forget()

class App(ctk.CTk):

def __init__(self):

super().__init__()
self.mainframe = ctk.CTkFrame(self)
self.mainframe.pack(fill=ctk.BOTH, expand=1)
self.show_vids()

def create_video_player(self, i):

print(f"Opening Video Page {i}") # TEMP

self.video_frame = ctk.CTkFrame(master=self.mainframe, width=self.winfo_screenwidth(), height=self.winfo_screenheight()-100)

#self.video_player = player.Player(self.video_frame,height=200,width=300)
self.video_player = player.Player(self.video_frame,height=self.winfo_screenheight()-200,width=self.winfo_screenwidth())

self.rowconfigure(0,weight=1)
self.rowconfigure(1,weight=0)
self.columnconfigure(0,weight=1)

self.controls = Controls(parent=self.video_frame,player=self.video_player,return_from_vid_page=self.return_from_vid_page)
self.video_player.bind("",self.controls.update_scale)

#self.video_player.grid(column=0,row=0,sticky=tk.NSEW,padx=5,pady=5)
self.video_player.pack(fill="both")
self.video_player.load(os.path.join(os.getcwd(), self.vids[i]))
#self.controls.grid(column=0,row=1,sticky=tk.NSEW,padx=10,pady=10)
self.controls.pack(fill="both")

self.video_frame.place(anchor=ctk.NW, x=0, y=40)

print(f"Closing Video Page {i}") # TEMP

def open_video_page(self, i):

# Creating video player inside thread
video_player_thread = threading.Thread(target=self.create_video_player, args=(i,))
video_player_thread.start()

def close_video_page(self):

self.video_player.stop()
self.video_player.END = True
self.video_player.pack_forget()
self.controls.pack_forget()
self.video_frame.place_forget()
del self.video_player
del self.controls

def video_button_event(self, i): # TODO: VIEW VIDEO i

def nested_event():

self.hide_vids()
self.open_video_page(i)

return nested_event

def return_from_vid_page(self):

self.close_video_page()
self.show_vids()

def show_vids(self):  # (OPEN PREVIEW PAGE)

### EDIT ###

print("SHOWING VIDEOS...") # TEMP

# Getting all files in current directory
files = [f for f in os.listdir(os.getcwd()) if os.path.isfile(os.path.join(os.getcwd(), f))]

print(files)

# Getting all MP4 files
self.vids = [f for f in files if f[0:5] == "video"]
for vid in self.vids:
if vid[-4:len(vid)] != ".mp4":
self.vids[vids.index(vid)] = vid + ".mp4"

# Displaying videos (grid --> pack)
methods = [self.video_button_event(i) for i in range(len(self.vids))]
self.preview_page = previewPage(master=self, title="Select Videos to Upload:", values=self.vids, methods=methods, height=self.winfo_screenheight()-100)
#self.preview_page.grid(row=0, column=0, padx=10, pady=(10, 0), sticky="nsew")
self.preview_page.pack(fill="both")

print("waiting...")

# Re-initialising wait state
self.wait_state = ctk.IntVar()

# Setting flag
self.displaying_vids = True

# Return video names with corresponding checkbox on
vids_to_upload = ""
for var in self.preview_page.str_vars:
if var.get() == "on":
vids_to_upload = vids_to_upload + vid[self.preview_page.str_vars.index(var)] + ' '
return vids_to_upload

def hide_vids(self): # (CLOSE PREVIEW PAGE)

self.preview_page.close()
self.preview_page.pack_forget()
self.displaying_vids = False

app = App()
app.mainloop()
При этом создается список кнопок, при нажатии которых отображается соответствующее видео, расположенное в той же папке, что и файл Python. Я также отредактировал модуль «tkintervideo» так, что кнопка «возврат» расположена в правом нижнем углу видеоплеера.
Когда я нажимаю на одно из видео, возвращаюсь к исходную страницу, затем попробуйте воспроизвести ее еще раз, появится вышеупомянутая ошибка:

Код: Выделить всё

PermissionError: [Errno 13] Permission denied: C:\\Users\\zvirg\\Programs\\Automated Content Creation\\tkintervideo\\cache\\output.wav'
(этот каталог файлов действителен, а рабочим каталогом является папка «Автоматическое создание контента»)
В чем причина этой ошибки? ?

Подробнее здесь: https://stackoverflow.com/questions/789 ... video-in-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»