视频教程观看地址:http://study.163.com/course/courseMain.htm?courseId=1003853008
首先,我们来创建新脚本,命名为pymodoro:
和上节课一样,我们只需要import tkinter,然后,我们需要把一个窗口调出来:
import tkinter
root = tkinter.Tk()
root.mainloop() |
在这里,为了编写更健壮的代码,所以我们可能在这里面加一个判断:
这样当创建程序时,只有在主函数中,才会运行这个脚本。现在,我们要创建一个控制整个应用程序的类。所以接下来,我们要创建类pymodoro,它的__init__函数接受一个参数master,这个master参数,你可以把它想象为主窗口,主应用程序,主进程,所以,我们会说self.master = master.
import tkinter
class Pymodoro:
def __init__(self, master):
self.master = master |
然后在这里我们把root传递给Pymodoro:
if __name__ =='__main__':
root = tkinter.Tk()
Pymodoro(root)
root.mainloop() |
如果我们现在运行它,那么,我们得到一个像我们以前做的一个窗口。只有一个白色的方形。没什么变化。
所以,我们如何能够更灵活的把东西放在窗口中呢?实际上,我们可以使用网格,通常当我们使用网格时,我们会创建一个框架,框架只是一个不可见的框,我们可以把网格放到这个框里。所以,在我们的__init__函数中,我们输入:
class Pymodoro:
def __init__(self, master):
self.master = master
self.mainframe = tkinter.Frame(self.master, bg='white') |
这个frame属于master.然后,我们将背景设置为白色。
然后我们要打包这个frame。我们想确保frame占据整个窗口。所以填充就是tkinter.BOTH,Expand是True。
class Pymodoro:
def __init__(self, master):
self.master = master
self.mainframe = tkinter.Frame(self.master, bg='white')
self.mainframe.pack(fill = tkinter.BOTH, expand = True) |
如果我们运行这个,依然不会看到任何新的变化。
所以现在,来创建一个新函数:build_grid,这个函数用于控制网格的创建:
def __init__(self, master):
self.master = master
self.mainframe = tkinter.Frame(self.master, bg='white')
self.mainframe.pack(fill = tkinter.BOTH, expand = True)
def build_grid(self):
self.mainframe.columnconfigure(0, weight = 1)
self.mainframe.rowconfigure(0, weight=0)
self.mainframe.rowconfigure(1, weight=1)
self.mainframe.rowconfigure(2, weight=0) |
那么,以上代码做了什么呢?所以我们有一个网格,它有列和行。所以,这里我们要有一列,它是列0,它的权重为1,这个权重1意味着它可以按任何比例调整大小。也就是说,这一列大小是可变的,然后在这里我们有三行.行0到行2,注意到,顶部行和底部行,他们的权重为0,所以他们不会调整大小,他们将保持自己的大小。但是行1,在中间,因为它需要占用尽可能多的空间,所以我们希望中间的那行大小可变。
那么,现在我们要在__init__函数中调用self.build_grid,
def __init__(self, master):
self.master = master
self.mainframe = tkinter.Frame(self.master, bg='white')
self.mainframe.pack(fill = tkinter.BOTH, expand = True)
self.build_grid() |
所以现在网格已经建好了,接下来,让我们添加横幅,也就是我们的标志到窗口的顶部。
所以,再次创建一个自己的函数: build_banner() ,它不需要任何参数。这里我们将创建一个label文本,当然,它将属于mainframe。然后,我们将背景设置为红色。文本,我们设置为Pymodoro。前景色设为白色。最后再设置字体,设置字体必须传递一个元组,在这种情况下,我想要微软雅黑,然后字体大小,我们设为24.
def build_grid(self):
self.mainframe.columnconfigure(0, weight = 1)
self.mainframe.rowconfigure(0, weight=0)
self.mainframe.rowconfigure(1, weight=1)
self.mainframe.rowconfigure(2, weight=0)
def build_banner(self):
banner = tkinter.Label(
self.mainframe,
bg = 'red',
text = '番茄钟',
fg = 'white',
font = ('微软雅黑', 24)
) |
接下来,我们要把这个文本添加到我们的网格中,所以我们要调用banner.grid.
我们希望它在行0,因为我们希望它在顶部,然后,我们希望它在列0,然后,我们要传递粘性,这个粘性它是一个字符串。这里我们可以想象有一个正方形,顶部是北,侧面是东和西,底部是南。因此我们需要指定文本需要调整的方向。我们只会水平调整,而不会垂直调整,所以我们只需要担心两侧,所以键入ew.,分别代表的是西边和东边。
然后,我想给它在两侧一点点填充,所以padx = 10,pady = 10., x是水平,y是垂直的..Padding就是内容和边缘之间的空白。
def build_banner(self):
banner = tkinter.Label(
self.mainframe,
bg = 'red',
text = '番茄钟',
fg = 'white',
font = ('微软雅黑', 24)
)
banner.grid(
row = 0,column = 0,
sticky = 'ew',
padx = 10, pady = 10
) |
然后我们回到构造函数中,调用build_banner。
def __init__(self, master):
self.master = master
self.mainframe = tkinter.Frame(self.master, bg='white')
self.mainframe.pack(fill = tkinter.BOTH, expand = True)
self.build_grid()
self.build_banner() |
所以现在,让我们尝试运行它。看看我们得到什么。你看,这里我们已经得到的了一个横幅,非常棒。
更多精彩内容尽在视频中!
本文固定链接:
http://www.oxox.work/web/tkinter/begin-dev/ | 虚幻大学查看原文:
http://www.oxox.work/web/tkinter/begin-dev/