博学的柳树 · 深圳市生态环境局宝安管理局关于公布2023年 ...· 1 月前 · |
儒雅的打火机 · 2023年7月11日外交部发言人汪文斌主持例 ...· 2 月前 · |
高大的烤红薯 · 计算机编程学习书籍分享,【百度网盘链接分享】 ...· 11 月前 · |
机灵的灌汤包 · 这部动画的王子居然一天逛三次青楼?_哔哩哔哩 ...· 1 年前 · |
咆哮的枇杷 · 「江铃汽车江铃特顺」江铃汽车 特顺 ...· 1 年前 · |
支持本地音频以及流媒体在线播放。
预览
1 from tkinter import * 2 import tkinter.ttk as ttk 3 from tkinter.font import Font 4 from PIL import Image, ImageTk 5 from resource import control_icon, bottom_icon 6 from seekbar import Seekbar 7 import Pmw 10 class AudioView(Tk): 12 def __init__(self): 13 super().__init__() 14 self._init_data_() 15 self._set_window_() 16 self._create_menu_bar() 17 self._create_top_view() 18 self._create_control_panel() 19 self._create_list_box() 20 self._create_bottom_view() 23 if "__main__" == __name__: 24 app = AudioView() 25 app.mainloop()
Tkinter 的各小控件在实际使用中,都会存在一些细节问题,这些细节问题不是在初识小控件的时候能弄明白的,需要有一定的实战经验,并结合具体的项目才能体会出来。
这部分描述,在
tkinter
文档中并未描述,我们需要查看
tcl/Tk
的 相关文档https://www.tcl.tk/man/tcl8.7/TkCmd/wm.htm ,关于窗口
feature
的设置,推荐阅览本人另一篇博客
传送门
https://arcticfox.blog.csdn.net/article/details/89605240 利用这点能实现桌面悬浮控件,可用于歌词展现
1 self.wm_attributes("-alpha", 0.9)
LabelFrame
的扩展用法
1 menu_frame = Frame(bg="black") 3 frame = LabelFrame(self, labelwidget=menu_frame, bg="black", borderwidth=2, 4 padx=10, pady=8, relief="sunken")
Listbox
的深入学习
给
Listbox
添加右键选中菜单
1 self.list_box = Listbox(frame, bg="black", yscrollcommand=y_bar.set, fg="white", 2 xscrollcommand=x_bar.set, border=0, highlightthickness=0, 3 selectforeground="#F0F126", selectbackground="black", 4 activestyle="none", font=("微软雅黑", -18), height=8) 6 self.list_box.bind('<Double-Button-1>', self.list_selected) 7 self.list_box.bind("<Button-3>", self.show_context_menu) 9 # 设置选中 10 if self.list_box.size() == 1: 11 self.list_box.selection_set(0) 13 def show_context_menu(self, event): 14 # 清除鼠标右键选中色 15 for i in range(self.list_box.size()): 16 self.list_box.itemconfig(i, background="black") 18 # 获取当前鼠标右键选中的索引 19 index = self.list_box.nearest(event.y) 20 # 选中后改变背景色 21 self.list_box.itemconfig(index, background="gray") 23 self.context_menu.entryconfigure(0, command=lambda: self.remove_at(index)) 24 self.context_menu.tk_popup(event.x_root, event.y_root)
Canvas
与自定义控件
该项目中,我们主要自定义的是一个音频进度条控件
Seekbar
。主要使用Canvas的
coords
函数来移动对象,关于Canvas支持的一些功能,列举如下
Seekbar
中,我们监听了鼠标按下和移动事件,关于事件的修饰符,可以查看
tcl/Tk
的官方文档,内容比
tkinter
要全面很多,相关部分文档https://www.tcl.tk/man/tcl8.7/TkCmd/bind.htm
它是一款自由、开源的跨平台多媒体播放器及框架,全面支持绝大部分的多媒体格式,以及各类流媒体协议。也就是说,使用它既能播放本地音视频文件,也能在线播放各类流媒体资源。
关于VLC的安装与详细使用,请阅览本人博客 传送门https://blog.csdn.net/yingshukun/article/details/89527561
关于在Tkinter中使用
消息队列 + 多线程
实现异步任务方法,我早前已写过详细博客 传送门https://blog.csdn.net/yingshukun/article/details/78838395 看一下博客即可。
当前这个项目,我们将使用另一种更加简洁高效的方式实现异步任务——线程池
1 from concurrent.futures import ThreadPoolExecutor 4 class RequestTask(): 5 task = None 7 def __init__(self): 8 self.executor = ThreadPoolExecutor(max_workers=1) 10 # 用submit添加耗时任务,该函数会立即返回,不会阻塞 11 def request(self, url, count): 12 self.task = self.executor.submit(get_music_list, url, count) 14 # 检查异步任务是否执行完成 15 def check_task(self): 16 return self.task.done()
高大的烤红薯 · 计算机编程学习书籍分享,【百度网盘链接分享】 - 知乎 11 月前 |