27 tkinter

菜单、子窗口

* coding: UTF-8 *

#@time: 2022/2/8 11:33
#@Author: Bao

from tkinter import *

mainWin=Tk()
mainWin.title(‘Menu’)
width = 420
height = 300
#获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = mainWin.winfo_screenwidth()
screenheight = mainWin.winfo_screenheight()
alignstr =’%dx%d+%d+%d’ % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
mainWin.geometry(alignstr)
mainWin.resizable(width=False, height=True)

def setFuc():
entIp.delete(0,END)
entIp.insert(‘insert’,‘192.168.16.195’)

def openFuc():
entIp.delete(0,END)
entIp.insert(‘insert’,‘192.168.16.192’)

def newFuc():
entIp.delete(0,END)
entIp.insert(‘insert’,‘192.168.16.193’)

def conFuc():
def quitSub(): #关闭子窗口函数
t1.destroy()
def conSub(): #子窗口按钮函数
entIp.delete(0,END)
entIp.insert(‘insert’,‘192.168.16.196’)
quitSub()
entIp.delete(0,END)
entIp.insert(‘insert’,‘192.168.16.191’)
#创建子窗口
t1=Toplevel(mainWin)
t1.geometry(alignstr)
Label(t1, text=‘子窗口’).place(x=20,y=20)
Button(t1,text=‘确定’,command=conSub).place(x=20,y=50)

#创建顶级菜单
menubar=Menu(mainWin)

#创建下拉菜单
fileMenu=Menu(menubar)
fileMenu.add_cascade(label=‘open’,command=openFuc)
fileMenu.add_separator()
fileMenu.add_command(label=‘new’,command=newFuc)

#在顶级菜单添加二级菜单
menubar.add_cascade(label=‘File’,menu=fileMenu)
#一级菜单命令
menubar.add_command(label=‘Connect’,command=setFuc)

#显示菜单
mainWin.config(menu = menubar)

labIp=Label(mainWin,text=‘Ip’)
labIp.place(x=60,y=40,width=30,height=20)

entIp=Entry(mainWin)
entIp.insert(‘insert’,‘127.0.0.1’)
entIp.place(x=100,y=40,width=100,height=20)

varIp=StringVar()
varIp.set(‘确定’)
conBut=Button(mainWin,textvariable = varIp,command=conFuc)
conBut.place(x=160,y=70,width=30,height=20)

mainWin.mainloop()

<think>我们正在讨论Tkinter中如何创建和使用输入框组件(Entry)。根据引用[1][3][4],输入框是Tkinter中用于接收用户单行文本输入的基本组件。下面我将详细说明创建和使用步骤: ### 1. 创建输入框 使用`tkinter.Entry`类创建输入框: ```python import tkinter as tk root = tk.Tk() entry = tk.Entry(root) # 创建输入框 entry.pack() # 布局到窗口 root.mainloop() ``` ### 2. 配置输入框属性 通过参数设置输入框样式(引用[2][4]): ```python entry = tk.Entry(root, width=30, # 宽度(字符数) font=("Arial", 12),# 字体 fg="blue", # 前景色(文字颜色) bg="white", # 背景色 show="*") # 显示为密码形式(用*替代) ``` ### 3. 获取输入内容 两种常用方法(引用[3][4]): - **直接获取**:使用`get()`方法 ```python text = entry.get() # 返回当前输入框的字符串 ``` - **绑定变量**:使用`StringVar` ```python text_var = tk.StringVar() entry = tk.Entry(root, textvariable=text_var) # 通过变量获取 text = text_var.get() ``` ### 4. 插入与删除内容 - 插入文本:`entry.insert(index, text)` ```python entry.insert(0, "默认文本") # 在开头插入 ``` - 删除文本:`entry.delete(first, last=None)` ```python entry.delete(0, tk.END) # 清空输入框 ``` ### 5. 事件绑定 实时响应输入变化(引用[4]): ```python def on_change(event): print("当前输入:", entry.get()) entry.bind("<KeyRelease>", on_change) # 按键释放时触发 ``` ### 6. 输入验证 通过`validate`参数限制输入(引用[4]): ```python def validate_input(new_text): return new_text.isdigit() # 只允许数字 vcmd = (root.register(validate_input), '%P') entry = tk.Entry(root, validate="key", validatecommand=vcmd) ``` ### 完整示例:登录窗口 ```python import tkinter as tk def login(): username = entry_user.get() password = entry_pass.get() print(f"用户名: {username}, 密码: {password}") root = tk.Tk() root.title("登录") # 用户名输入框 tk.Label(root, text="用户名:").grid(row=0, column=0) entry_user = tk.Entry(root) entry_user.grid(row=0, column=1) # 密码输入框(显示*) tk.Label(root, text="密码:").grid(row=1, column=0) entry_pass = tk.Entry(root, show="*") entry_pass.grid(row=1, column=1) # 登录按钮 btn = tk.Button(root, text="登录", command=login) btn.grid(row=2, columnspan=2) root.mainloop() ``` ### 注意事项 1. **布局**:推荐使用`grid`或`pack`布局管理器(引用[3]) 2. **多行输入**:需使用`Text`组件而非`Entry` 3. **样式定制**:可通过`ttk.Entry`获得更现代的外观(引用[2]) 通过以上步骤,您已掌握Tkinter输入框的核心用法。更高级定制可参考官方文档[^1][^4]。 §§相关问题§§ 1. Tkinter中如何实现多行文本输入? 2. 如何让Tkinter输入框支持复制粘贴快捷键? 3. Tkinter输入框如何设置占位提示文字(Placeholder)? [^1]:【Pythontkinter及组件如何使用。以上是使用 tkinter 组件创建 GUI 应用程序的基本步骤和常用方法。需要注意的是,具体组件的使用方法和参数可能会因 tkinter 的版本和操作系统的不同而略有差异。因此,在实际开发中,建议查阅最新的 tkinter 文档或相关教程以获取更详细和准确的信息。 [^2]:tkinter绘制组件(16)——现代输入框。 tkinter绘制组件(16)——现代输入框 引言布局函数结构组件功能创建输入框创建标识符和边框响应焦点事件标识符功能完整代码函数 效果测试代码最终效果2022-1-15新样式2022-2-19新样式2022-5-3新样式2022-8-7新功能2024-6-23密码框新标识符2024-8-24新样式2024-8-25密码输入框新样式2024-12-27密码输入框更新2025-2-1修复2025-2-16修复2025-2-23新样式2025-6-7新样式 github项目pip下载结语。 [^3]:GUI的终极选择:Tkinter4:Entry输入框组件。 ※可以使用 Entry 组件的 get() 方法获取输入框中的内容 (你也可以将一个tkinter的变量(通常是字符串的变量:StringVar())挂钩到textvariable 这个选项,然后通过变量的get方法来获取也是也可以的)下面通过一个例子来演示 需求:当按下获取信息的按钮时,会清空输入框,然后把信息给打印出来 分析:从第一张图可以分析出需要在一个窗口上添加作品、作者两个Label,两个Entry以及获取信息、退出两个button按钮 第一:生成两个Label分别显示作品和作者 第二:使用 grid()网格来布局 (通常的做法,已经学过的会用两个frame把它包含起来,现在用一个新的方法,Tkinter一共提供了三种布局组件的方式,第一种就是我们熟悉的pack(),然后还有一种就是(网格)grid(),就是用表格的形式来管理你的组件,还有一种place后边讲,这次就使用grid来布局组件) from tkinter import * root = Tk() Label(root,text="作品").grid(row=0,column=0) Label(root,text="作者").grid(row=1,column=0) e1 = Entry(root) e2 = Entry(root) e1.grid(row=0,column=1,padx=10,pady=5) e2.grid(row=1,column=1,padx=10,pady=5) def show(): print("作品:《%s》" %e1.get()) print("作者:%s" %e2.get()) e1.delete(0, "end") e2.delete(0, "end") Button(root,text = "获取信息",width = 10,command = show)\ .grid(row = 3,column = 0,sticky = W,padx =10,pady =5) Button(root,text = "退出", width = 10,command = root.quit)\ .grid(row = 3,column = 1,sticky = E,padx =10,pady =5) mainloop()。 [^4]:tkinter Entry(输入框)组件学习指南。Q: 如何获取输入时实时响应? A: 绑定 <KeyRelease> 事件: def on_key_release(event): print("当前输入:", entry.get()) entry.bind("<KeyRelease>", on_key_release) 学习建议 先掌握基本用法:创建、获取内容、简单交互尝试实现一个完整的登录窗口练习结合其他组件(如下拉框、复选框)使用探索更高级的验证和格式化功能。</think>### Tkinter 输入框(Entry)创建与使用指南 在 Tkinter 中创建和使用输入框(Entry 组件)是 GUI 开发的基础操作。以下是详细步骤和实用技巧,结合引用内容整理: --- #### 一、创建基本输入框 ```python import tkinter as tk root = tk.Tk() root.title("输入框示例") # 创建输入框 [^3] entry = tk.Entry(root, width=30) # width 控制可见字符数 entry.pack(pady=10) # 添加垂直间距 # 添加获取内容按钮 def get_text(): print("输入内容:", entry.get()) # 使用 get() 获取输入值 [^3] btn = tk.Button(root, text="获取输入", command=get_text) btn.pack(pady=5) root.mainloop() ``` > **关键参数** [^1][^3]: > - `width`:可见字符宽度 > - `fg`/`bg`:前景/背景色(如 `fg="blue"`) > - `font`:字体设置(如 `font=("Arial", 12)`) > - `show`:密码模式(如 `show="*"`) --- #### 二、高级功能实现 1. **实时响应输入变化** [^4] ```python def on_key_release(event): print("实时输入:", entry.get()) entry.bind("<KeyRelease>", on_key_release) # 绑定按键释放事件 ``` 2. **使用 StringVar 动态跟踪** [^3] ```python text_var = tk.StringVar() entry = tk.Entry(root, textvariable=text_var) # 监听变量变化 text_var.trace_add("write", lambda *args: print("变量值:", text_var.get())) ``` 3. **带验证的输入框** [^4] ```python def validate_input(new_text): return new_text.isdigit() # 只允许数字输入 vcmd = (root.register(validate_input), '%P') # %P 表示新文本 entry = tk.Entry(root, validate="key", validatecommand=vcmd) ``` --- #### 三、实用布局技巧(网格布局示例)[^3] ```python # 标签+输入框组合 tk.Label(root, text="用户名:").grid(row=0, column=0, padx=5, pady=5) user_entry = tk.Entry(root) user_entry.grid(row=0, column=1, padx=10, pady=5) tk.Label(root, text="密码:").grid(row=1, column=0) pass_entry = tk.Entry(root, show="•") # 密码掩码 pass_entry.grid(row=1, column=1, padx=10, pady=5) ``` > **布局参数**: > - `row`/`column`:网格行列位置 > - `padx`/`pady`:水平/垂直内边距 > - `sticky`:对齐方式(如 `sticky="w"` 西对齐) --- #### 四、现代样式定制(参考引用[2]) ```python # 创建带边框和标识符的现代输入框 entry = tk.Entry(root, bd=0, highlightthickness=1, highlightcolor="#4CAF50") entry.pack(pady=10) # 添加浮动标签 label = tk.Label(root, text="邮箱", bg="white", fg="gray") label.place(x=15, y=12) # 浮动在输入框上方 def on_entry_focus_in(_): label.config(fg="#4CAF50") # 聚焦时变绿色 def on_entry_focus_out(_): label.config(fg="gray") # 失焦时变灰色 entry.bind("<FocusIn>", on_entry_focus_in) entry.bind("<FocusOut>", on_entry_focus_out) ``` --- #### 五、最佳实践建议 1. **数据获取**: - 优先使用 `get()` 直接获取内容 [^3] - 敏感数据(如密码)及时清除:`entry.delete(0, tk.END)` 2. **错误处理**: ```python try: value = float(entry.get()) except ValueError: tk.messagebox.showerror("错误", "请输入数字") ``` 3. **组件组合**: - 结合 `Button` 触发提交动作 - 配合 `Text` 组件实现多行输入 > **注意**:不同 Tkinter 版本可能有细微差异,建议查阅官方文档 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值