当前位置: 首页 > article >正文

单行文本框控件

在Tkinter中,典型的单行文本框控件被称为Entry。在这个案例中,我们将在我们的GUI中添加这样一个Entry控件。我们将通过描述Entry控件为用户执行的功能,使我们的标签更加有用。

准备就行

本案例基于上一篇《创建按钮并修改Text属性》中的代码,你可以从这里下载其中的代码。

如何操作

创建Entry_Widget.py代码文件,并修改如下:

# Entry_Widget.py

# imports
import tkinter as tk
from tkinter import ttk

# Create instance
win = tk.Tk()

# Add title
win.title("Python GUI")


# Modified Button Click Function
def click_me():
    action.configure(text="Hello " + name.get())


# Changing our Label
ttk.Label(win, text="Enter your name:").grid(column=0, row=0)

# Adding a Entry widget
name = tk.StringVar()
name_entry = ttk.Entry(win, width=12, textvariable=name)
name_entry.grid(column=0, row=1)

# Adding a Button
action = ttk.Button(win, text="Click Me!", command=click_me)
action.grid(column=1, row=1)

# Start GUI
win.mainloop()

执行以上代码,GUI界面如下所示:
Entry_Widget
在文本框中输入一些字符,并点击按钮,界面将变成下面的状态:
Entry_Widget

代码原理

在第16行,我们获取了Entry控件的值。我们还没有使用面向对象编程(OOP),那么我们如何能够访问一个甚至还没有声明的变量(name)的值呢?

在Python的过程式编程中,我们必须在使用一个名称的语句之前物理地定义该名称。那么这是怎么工作的呢(实际上它确实没毛病)?

答案是,按钮点击事件是一个回调函数,而当用户点击按钮时才会执行,此函数中引用的变量在按钮点击时已经是已知且确实存在的。

一切都很顺利。

第20行给我们的标签赋予了一个更有意义的内容,它描述了其下方的文本框需要输入的内容。

我们将按钮移动到标签旁边,以便在视觉上将两者关联起来。我们仍然在使用网格布局管理器,这将在第2章“布局管理”中更详细地解释。

第23行创建了一个变量name。这个变量绑定到Entry控件,并且,在我们的click_me()函数中,我们可以通过调用此变量的get()方法来获得Entry控件的值,这非常有效。

通过尝试我们可以发现,即使我们输入了一个长文本,但文本框Entry控件并不会变长,这是因为我们在第24行将其宽度硬编码为12。

课后学习

Python 是一种动态类型语言,会根据赋值来推断类型。这意味着,如果我们将一个字符串赋值给变量 name,那么它的类型就是字符串;如果我们将一个整数赋值给 name,那么它的类型就是整数。

在使用 tkinter 时,我们必须先将 name 变量声明为 tk.StringVar() 类型,然后才能成功使用它。原因是 tkinter 并不是 Python 本身,作为Python的GUI库,它有自己的一套编码标准。我们可以从 Python 中使用 tkinter,但它并不是同一种语言。

本文的代码可以通过这里下载。


http://www.kler.cn/a/512071.html

相关文章:

  • MySQL 很重要的库 - 信息字典
  • 使用SIPP发起媒体流性能测试详解
  • 20250119面试鸭特训营第27天
  • AudioGPT全新的 音频内容理解与生成系统
  • RabbitMQ--延迟队列
  • 安全测评主要标准
  • (4)Vue 3 + Vite + Axios + Pinia + Tailwind CSS搭建一个基础框架
  • STL—stack与queue
  • 区块链 智能合约安全 | 回滚攻击
  • 【QT】 控件 -- 按钮类(Button)
  • 图解Git——分布式Git《Pro Git》
  • Java虚拟机相关八股一>jvm分区,类加载(双亲委派模型),GC
  • 2025.1.16——四、get_post 传参方式
  • VIVADO ILA IP进阶使用之任意设置ILA的采样频率
  • 人形机器人将制造iPhone!
  • 在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端
  • 后端架构学习笔记
  • Go语言的正则表达式
  • leetcode 221. 最大正方形
  • 提升大语言模型的三大策略
  • NLP 单双向RNN+LSTM+池化
  • 苍穹外卖 项目记录 day07 商品缓存-购物车模块开发
  • [实战]Ubuntu使用工具和命令无法ssh,但使用另一台Ubuntu机器可以用命令ssh,非root用户。
  • 『 实战项目 』Cloud Backup System - 云备份
  • Kotlin 2.1.0 入门教程(五)
  • 【useImperativeHandle Hook】通过子组件暴露相应的属性和方法,实现在父组件中访问子组件的属性和方法