2017年1月20日15:46:25

昨天已经做出了简单的窗体,但它太小,并且还缺乏文本显示框、文本输入框这两个器件,现在的主要任务也就是:

  • 添加文本显示器件。
  • 添加文本输入器件。
  • 给窗体设定合适的尺寸。

前面“生成窗体”这个子任务我是逐渐阅读An Introduction To Tkinter,在过程当中掌握了Tkinter的基本概念和用法,只是有些费时间,所以我决定尝试另一种方法:浏览手册里主要内容,尽快定位到自己需要的背景知识,快速构建原型。

添加显示器件

Widget classes里面找到有两个与文本显示有关的器件:Label与Text,由于后者具有编辑功能,所以决定先使用Label。

使用Label的时候指定了size,效果如下:

下一个设想

这个窗体不满足要求,我还需要将"help","history"和"quit"显示到窗体右下方,同时Label用来做天气信息现实,器件需要有单独的显示效果。

既然Frame做为容器来存放多个显示器件,所以我决定将Label放入单独的Frame当中,在尝试的过程当中发现给Frame设定height, width并不起作用,给Frame里面的Label设定尺寸是可以的,是不是Frame并不做为可视化的窗体存在呢?

于是,在给Label设定size达到了窗体增大的效果;在给pack传输side参数之后将button按钮展示在了右侧。

现在还需要一个文本输入框来完成当前“更多器件”的子任务。

输入器件

Class Reference当中看到Entry,点击进去看了一下:

When to use the Entry Widget

The entry widget is used to enter text strings. This widget allows the user to enter one line of text, in a single font.

To enter multiple lines of text, use the Text widget.

看来的确可以使用该空间来作为输入器件。

在将上面Entry的示例测试之后改写了代码,竟让碰巧达到了自己想要的布局效果。之前自己一直没有办法将输入框与"quit"等按钮放在一行,没有想到分别针对输入框建立一个Frame,针对"quit"等按钮建立Frame,之后会显示在一行,比如下面的代码:

# 针对输入框的Frame,它里面存放有Entry和Button。
userinput = Frame(master)
userinput.pack(side=LEFT)
self.city = Entry(userinput)
self.city.pack(side=LEFT)
self.decide = Button(userinput, text="确定")
self.decide.pack(side=LEFT)

# 针对“quit”等按钮的Frame,它里面存放有了"quit","history"和"help"三个按钮。
frame = Frame(master)
frame.pack(side=RIGHT)
self.quit = Button(frame, text="quit", fg="red", command=frame.quit)
self.quit.pack(side=RIGHT)
self.history = Button(frame, text="history", command=self.history)
self.history.pack(side=RIGHT)
self.help = Button(frame, text="help", command=self.help)
self.help.pack(side=RIGHT)

运行的效果为:

results matching ""

    No results matching ""