tkinter禁用(只读)下拉列表Combobox问题
作者:乌拉队长 发布时间:2021-01-02 13:05:34
标签:tkinter,下拉列表,Combobox
tkinter禁用(只读)下拉列表Combobox
tkinter将下拉列表框Combobox控件的状态设置为只读,也就是不可编辑状态:
# 定义下拉列表值
self.Combo3List = [1, 2, 3,]
# 定义下拉列表控件,self.Frame1为Combobox的父级, state表示Combobox的状态,readonly为只读,disabled为禁用
self.Combo3 = Combobox(self.Frame1, values=self.Combo3List, font=("宋体",9), state="readonly")
# 放置控件
self.Combo3.place(relx=0.884, rely=0.627, relwidth=0.053, relheight=0.089)
# 设置Combobox的默认值为Combo3List集合的第一个元素
self.Combo3.set(self.Combo3List[0])
tkinter中大部分控件都拥有state属性,上面代码段中的state属性也可以在Combobox的Configure()函数中进行配置。
如下:
# 设置状态为只读
self.Combo3.configure(state="readonly")
# 设置状态为禁用
#self.Combo3.configure(state="disabled")
tkinter知识点使用记录
引入模块与创建实例
import tkinter as tk
root = tk.TK()
窗口属性设置
# 设置窗口标题
root.title('考试广播系统')
# 设置窗口图标
root.iconbitmap(EXAM_ICON)
# 设置窗口背景色
root.configure(background='#d4d0c8')
# 禁用调整GUI大小
root.resizable(0, 0)
# 获取屏幕宽高
sc_w = self.winfo_screenwidth()
sc_h = self.winfo_screenheight()
# 设置窗口大小
root.geometry(f"560x360+{(sc_w - 560) // 2}+{(sc_h - 360) // 2 - 40}")
# 隐藏窗口,设置后窗口固定
root.overrideredirect(1)
退出时弹窗确定
from tkinter import messagebox
def quit_ui():
if messagebox.askokcancel("退出", "你想退出窗口吗?"):
self.quit()
self.destroy()
# 设置窗口属性时一并设置
root.protocol('WM_DELETE_WINDOW', quit_ui)
如何向绑定方法中传递参数
一般向按钮添加事件方法:
tk.Button(self, text='登录(L)', width=10, bg="#d4d0c8", command=login_btn).place(x=164, y=300)
如果向在绑定方法时传递参数,可以使用下面这种方法:
tk.Button(self, text='登录(L)', width=10, bg="#d4d0c8", command=lambda: login_btn('l')).place(x=164, y=300)
按钮绑定快捷键
# 在方法中定义触发事件
root.bind_all('<Control-l>', login_btn)
鼠标放在按钮提示信息
import Pmw
balloon = Pmw.Balloon(root)
# 创建按钮对象
quit_btn = tk.Button(self, image=take_quit_img, bg="#d4d0c8",
command=lambda: _audio_control("quit"))
quit_btn.place(width=30, height=130, x=870, y=382)
balloon.bind(quit_btn, "隐藏控件")
注意:在创建控件后,如何先布局再赋值,那么控件对象是无效,需要先赋值再布局
# 这种方式是无法实现赋值的
quit_btn = tk.Button(self, image=take_quit_img, bg="#d4d0c8",
command=lambda: _audio_control("quit")).place(width=30, height=130, x=870, y=382)
输入框接收数据
注意:如果是在类中创建tk对象,那么tk.StringVar()需要在__init__方法中声明,不然不能使用
fwq_var_name = tk.StringVar()
# 输入框设置初始值
fwq_var_name.set("七星耀月")
tk.Entry(root, textvariable=fwq_var_name, width=38, bd=3).place(x=250, y=100)
如何显示图片
# 比如为按钮控件添加图片
take_ws_img = tk.PhotoImage('图片所在绝对路径')
sshow_btn = tk.Button(root, image=take_ws_img , bg="#d4d0c8", command=show_other_btn)
show_btn.place(width=50, height=50, x=813, y=13)
动态更改控件的属性
# 比如动态更改按钮显示的图片,在config中修改指定参数即可
show_btn.config(image=take_right_img)
实现下拉菜单
km_var_name = tk.StringVar() # 接收下拉选择的值
SUBJECT_LIST = ("语文", "数学", "英语", "物理", "化学", "地理", "历史")
sub_box = ttk.Combobox(root, textvariable=km_var_name)
sub_box["values"] = SUBJECT_LIST
sub_box.current(0)
sub_box.bind("<<ComboboxSelected>>", get_sub_box)
sub_box.place(width=150, height=24, x=175, y=103)
效果参考:
实现切换导航栏
btn_choose_value = tk.IntVar()
btn_choose_value.set(0)
tk.Radiobutton(root, variable=self.btn_choose_value, bg="#d4d0c8", anchor="n", text="信息提示", value=0, indicatoron=0, command=self.show_or_hide_info).place(x=380, y=336)
tk.Radiobutton(root, variable=self.btn_choose_value, bg="#d4d0c8", text="语音播放内容", alue=1, anchor="n", indicatoron=0, command=self.show_or_hide_info).place(x=488, y=336)
效果参考:
实现列表
menu_frame = tk.Frame()
frame = tk.LabelFrame(root, labelwidget=menu_frame, bg="white", borderwidth=2, padx=10, pady=8, relief="sunken")
y_bar = tk.Scrollbar(frame, orient="vertical", bd=0, width=14)
list_box = tk.Listbox(frame, bg="white", yscrollcommand=y_bar.set, border=0, highlightthickness=0, selectforeground="blue", selectbackground="#d4d0c8", activestyle="none", font=("微软雅黑", 8), height=4)
y_bar['command'] = list_box.yview
y_bar.pack(side="right", fill="y")
list_box.pack_forget()
info_list_box = tk.Listbox(frame, bg="white", yscrollcommand=y_bar.set, border=0, highlightthickness=0, font=("微软雅黑", 8), height=4)
y_bar['command'] = info_list_box.yview
y_bar.pack(side="right", fill="y")
info_list_box.pack(anchor="nw", fill="both", expand="yes")
info_list_box.insert('end', f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 启动服务")
info_list_box.insert('end', f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 更新语音文件成功")
frame.place(width=480, height=124, x=380, y=362)
效果参考:
解决获取不到新窗口文本框内容
使用了tk.Tk()
方法来新建窗口,这样得到的是一个新的根窗口,无法与原来的根窗口进行有效交互。
因此需要使用Toplevel
组件新建顶级窗口
new_tk = tk.Toplevel()
来源:https://blog.csdn.net/asdfg6541/article/details/103970413
0
投稿
猜你喜欢
- 前言将字符串动态转换为DOM节点,在开发中经常遇到,尤其在模板引擎中更是不可或缺的技术。字符串转换为DOM节点本身并不难,本篇文章主要涉
- 有的同学会说,可以使用源代码搜索的办法。的确,对于一个相对简单的页面,这个方法时常奏效。但是,对于构成相对复杂的页面(比如页面嵌入很多脚本文
- 在计算机普及的现代设计领域,文字的设计的工作很大一部分由计算机代替人脑完成了(很多平面设计软件中都有制作艺术汉字的引导,以及提供了数十上百种
- 大家好,学完面向对象与异常处理机制之后,接下里我们要学习 包与模块 。首先我们要了解什么是包?什么是模块?接下来我们还要学习 如何自定义创建
- 作为 Web 设计者,我们希望实现鹤立鸡群的设计,要做到这一点,要开阔眼界。欧美同东方的 Web 设计很不同,因为属于不同的文化。韩国不仅为
- 给zblog添加上“运行代码”的功能,这是“密陀僧”修改z-blog源码,给z-bog增添的新功能。这个方法出来很久了,我现在才加上还不晚吧
- zyw147 提出问题:ASP读取指定xml 的节点?怎么用ASP《不是JS》取出指定的节点? 例如我想取出北京,我在ASP客户端提交的是
- 看看这个logo,有些像python的小蛇吧 。这次介绍的数据库codernityDB是纯python开发的。先前用了下tinyDB这个本地
- 问题背景调试脚本时,遇到一个问题:ImportError: cannot import name 'A' from '
- 首先说明一下SQL Server内存占用由哪几部分组成。SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer)、
- FSO,正如UFO般令人激动、令人神往,当然更多的亦是让人欢喜让人忧。君不见某空间服务商广告:100MB空间只要60RMB/年,支持数据库,
- 脚本架构:domain_test.py:批量解析运行主程序DomainResult.txt:域名解析结果文件domains.txt:解析的域
- 本文实例讲述了wxPython窗口的继承机制,分享给大家供大家参考。具体分析如下:示例代码如下:import wx class
- 本文实例讲述了PHP使用flock实现文件加锁的方法。分享给大家供大家参考。具体分析如下:flock在官方文档里的解释是:flock() 允
- 应用正则表达式的全局匹配,可以匹配出字符出现的次数,比较这些次数,将最大的保存并返回。代码如下: var countMost = funct
- 在官网下载源码包:https://www.php.net/downloads.php步骤:1、解压命令:tar -xjvf php.tar.
- 一、基本概念APScheduler全称Advanced Python Scheduler 作用为在指定的时间规则执行指定的作业。指定时间规则
- 功能描述目标完成多账号微信小程序每天自动签到输出签到成功则向微信群发送签到成功的信息否则提示用户签到失败,需手动签到包管理requestsi
- 对于任何一个开发项目来说最大的错误可能就是没有计划。最近,有些人认为开始前无需计划,一个优秀的开发者需要的是随机应变。我敢肯定这样的做法最后
- 本文实例讲述了Python实现基于HTTP文件传输的方法。分享给大家供大家参考。具体实现方法如下:一、问题:因为需要最近看了一下通过POST