0 写在前面
未经允许,不得转载,谢谢~
之前在这篇文章python 图形界面开发里记录了最开始学习python界面开发的有关知识,虽然整理了一些最常用的控件、属性,但还是缺少实践。
下面这张就是我接下来想实现的整体界面的示意图(请忽略我粗糙的UI~~)
界面
基本功能介绍:
点击按键next video会在下面的界面播放视频
视频播放完成后在预测语句后的文本框中出现对该视频的语义描述
点击按键标注语句可以在其后的文本框中展示对该视频的标注语句
这篇文章涉及的知识点还是挺多的哦:
Tkinter基本控件实现
TKinter控件属性优化
Tkinter实现视频播放
Threading模块实现多线程编程
真的可以自信满满地说点进来吧,不会让你失望的哈哈哈哈
1 具体实现
1.0 导入包、创建界面类
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
if __name__=='__main__':
app = Application()
# to do
app.mainloop()
1.1 设置窗口标题、界面最大化
具体的函数如下所示,先获得当前屏幕的大小,然后设置窗口大小。
def window_init(self):
self.master.title('welcome to video-captioning system')
width,height=self.master.maxsize()
self.master.geometry("{}x{}".format(width, height))
在__init__初始化中调用即可。
1.2 实现各个控件布局
1) 布局方式介绍
布局就是控制各个控件在整个界面中的位置,Tkinter总共有3中布局管理器,分别是pack grid和place
总结一些最重要的东西吧:
pack可以算是最常用的一种布局方式。就是像容器中从上到下(或者从左到右...)依次添加组件。
grid很形象地又称为网格布局。把矩形界面分成一个几行几列的网格块,这样就可以把组件放置于网格中固定的位置.
place这是三中布局中最灵活的一种方式。根据组件在界面中的坐标来制定位置,所以会比较灵活,但也意味着不那么稳定。
所有的三种布局都可以使用容器中放容器的方法,这是非常使用的一个技巧。
2) 布局设计图
我选择全部用pack的方式来完成页面的布局工作。
具体的设计图如下所示:
页面布局图
我已经尽力去画了,不知道这样是不是清楚~
总共从上到下分成3个Frame: fm1 fm2 fm3
第一个Frame里面包含一个用来显示titile的Label
第三个Frame里面包含一个用来显示视频帧图像的Label
第二个Frame里面又分成左右两个小的容器:fm2_left fm2_right
右边的fm2_right就包含一个用来播放视频的Buttton
左边的fm2_left又分为上下两个更小的容器:fm2_left_top fm2_lef_bottom
fm2_left_top fm2_lef_bottom里面都各自包含一个按钮Button和一个用来显示文本的Entry
3) 布局实现代码
我们先不管具体的细节,直接把各个控件的布局位置给定下来,界面优化的部分放到后面去再添加。
按照上面的布局设计图,视频区域暂且用一张图片替代,用pack()实现基本布局如下:
def createWidgets(self):
# fm1
self.fm1=Frame(self)
self.titleLabel=Label(self.fm1,text='video-captioning system')
self.titleLabel.pack()
self.fm1.pack(side= TOP)
# fm2
self.fm2=Frame(self)
self.fm2_left=Frame(self.fm2)
self.fm2_right=Frame(self.fm2)
self.fm2_left_top=Frame(self.fm2_left)
self.fm2_left