分享

Python|GUI编程中Entry部件详解

 算法与编程之美 2020-08-08

一、Entry部件基本介绍

Entry小部件是Tkinter的基本小部件,用于从应用程序的用户获取输入,即文本字符串。这个小部件允许用户输入一行文本。如果用户输入的字符串比小部件的可用显示空间长,则将滚动内容。这意味着不能看到字符串的整体。箭头键可用于移动到字符串的不可见部分。如果要输入多行文本,则必须使用文本小部件。

下面给大家介绍一下简单的Entry输入框创建:

import tkinter as tk
 
 windon = tk.Tk()
 tk.Label(windon,
text="账号").grid(row=0)
 tk.Label(windon,
text="密码").grid(row=1)
 
 e1 = tk.Entry(windon)
 e2 = tk.Entry(windon)
 
 e1.grid(
row=0, column=1)
 e2.grid(
row=1, column=1)
 
 windon.mainloop()

下面就是运行结果

图1.1 最基本的Entry组件

二、用Entry制作的输入框

好的,我们已经创建了输入字段,这样程序的用户就可以输入一些数据。但是我们的程序如何访问这些数据呢?我们如何阅读条目的内容?简而言之:get()方法就是我们要找的。我们用两个按钮“退出”和“显示”来扩展我们的小脚本。我们将函数show_entry_fields()绑定到一个自定的show按钮,该函数对entry对象使用get()方法。所以,每次点击这个按钮,输入字段的内容就会打印在我们调用脚本的终端上。

import tkinter as tk



defshow_entry_fields():

    print("账号: %s\n密码: %s" % (e1.get(), e2.get()))



windon = tk.Tk()

tk.Label(windon,

        
text="账号").grid(row=0)

tk.Label(windon,

        
text="密码").grid(row=1)



e1 = tk.Entry(windon)

e2 = tk.Entry(windon,
show = '*')



e1.grid(
row=0, column=1)

e2.grid(
row=1, column=1)



tk.Button(windon,

         
text='Quit',

         
command=windon.quit).grid(row=3,

                                   
column=0,

                                   
sticky=tk.W,

                                   
pady=4)

tk.Button(windon,

         
text='Show', command=show_entry_fields).grid(row=3,

                                                      
column=1,

                                                      
sticky=tk.W,

                                                      
pady=4)



tk.mainloop()
 

下面为运行结果:

图1.2 运行结果

账号密码我们都是输入的123456789,但是密码一栏我们添加了show参数,可以将内容替换成我们指定符号。show的值一般为一个长度为1的字符。

三、Entry最简单的计算器实例化

了解了上面的操作之后,我们可以编写一个计算器功能,我但们并不是真的在编写计算器,而是提供一个能够计算任何数学表达式并打印结果的图形用户界面。

话不多说,直接上代码:

from tkinter import *

#创建横条型框架

defframe(root, side):

    windon = Frame(root)

    windon.pack(side=side, expand=YES, fill=BOTH)

   
return windon



#创建按钮

defbutton(root, side, text, command=None):

    windon = Button(root,
text=text, command=command)

    windon.pack(
side=side, expand=YES, fill=BOTH)

   
return windon



#继承了Frame类,初始化程序界面的布局

classCalculator(Frame):

    def __init__(self):

        Frame.
__init__(self)

       
self.pack(expand=YES, fill=BOTH)

       
self.master.title('Simple Calculater')



        display = StringVar()

       
#添加输入框

       
Entry(self, relief=SUNKEN,

             
textvariable=display).pack(side=TOP, expand=YES,fill=BOTH)

       
#添加横条型框架以及里面的按钮

       
for key in ('123', '456', '789', '-0.'):

            keyF = frame(
self, TOP)

           
for char in key:

                button(keyF, LEFT, char,
lambda w=display, c=char: w.set(w.get() + c))



        opsF = frame(
self, TOP)

       
for char in '+-*/=':

            
if char == '=':

                btn = button(opsF, LEFT, char)

                btn.bind(
'<ButtonRelease - 1>', lambda e, s=self, w=display: s.calc(w), '+')



           
else:

               
btn = button(opsF, LEFT, char, lambda w=display, s='%s' % char: w.set(w.get() + s))



        clearF = frame(
self, BOTTOM)

        button(clearF, LEFT,
'clear', lambda w=display: w.set(''))



   
def calc(self, display):

        display.set(
eval(display.get()))



if__name__ == '__main__':

    Calculator().mainloop()
 

学会这个组件之后还能做更多有趣的小程序,我会根据读者的要求来更新更多和tkinter相关的内容,有读者想看什么有趣的小程序都可以留言告诉笔者,每周六就会更新本人的原创文章。

谢谢各位读者的支持,你们的支持是我们最大的动力。


END

主  编   |   张祯悦

责  编   |   刘仕豪

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约