开发者

tkinter禁用(只读)下拉列表Combobox问题

开发者 https://www.devze.com 2023-01-29 09:32 出处:网络 作者: 乌拉队长
目录tkinter禁用(只读)下拉列表Comboboxtkinter知识点使用记录引入模块与创建实例窗口属性设置退出时弹窗确定如何向绑定方法中传递参数按钮绑定快捷键鼠标放在按钮提示信息输入框接收数据如何显示图片动态更改控件的
目录
  • tkinter禁用(只读)下拉列表Combobox
  • tkinter知识点使用记录
    • 引入模块与创建实例
    • 窗口属性设置
    • 退出时弹窗确定
    • 如何向绑定方法中传递参数
    • 按钮绑定快捷键
    • 鼠标放在按钮提示信息
    • 输入框接收数据
    • 如何显示图片
    • 动态更改控件的属性
    • 实现下拉菜单
    • 实现切换导航栏
    • 实现列表
    • 解决获取不到新窗口文本框内容
  • 总结

    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='#dphp4d0c8')
    # 禁用调整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()需要在__inhttp://www.devze.comit__方法中声明,不然不能使用

    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)

    效果参考:

    tkinter禁用(只读)下拉列表Combobox问题

    实现切换导航栏

    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).phpplace(x=488, y=336)
    

    效果参考:

    tkinter禁用(只读)下拉列表Combobox问题

    实现列表

    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", yscrollcommphpand=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', jsf"[{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)
    

    效果参考:

    tkinter禁用(只读)下拉列表Combobox问题

    解决获取不到新窗口文本框内容

    使用了tk.Tk()方法来新建窗口,这样得到的是一个新的根窗口,无法与原来的根窗口进行有效交互。

    因此需要使用Toplevel组件新建顶级窗口

    new_tk = tk.Toplevel()

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消