tkinter下拉列表无法设置默认值

不同处

    # province_comb=Combobox(stu_add_win,width=13,textvariable=province_text,values=provinces,state='readonly')
    province_comb = Combobox(stu_add_win, width=13, values=provinces, state='readonly')

失败代码

#菜单组件
import time
from tkinter import Menu,Tk,Toplevel,Label,Entry,Button
import tkinter as tk
from tkinter.ttk import Combobox,Radiobutton
#添加学生信息
def pop_add_stu_win():
    stu_add_win=Toplevel()
    stu_add_win.title('添加学生')
    width=250
    height=300
    screen_width,screen_height=stu_add_win.maxsize()
    stu_add_win.geometry('%dx%d+%d+%d'%(width,height,(screen_width-width)/2,(screen_height-height)/2))
    #添加组件
    Label(stu_add_win,text='姓名',width=10).grid(row=1,column=0)
    user_name =tk.StringVar()
    Entry(stu_add_win,textvariable=user_name,width=15).grid(row=1,column=1)
    Label(stu_add_win,text='电话',width=10).grid(row=2,column=0)
    user_phone =tk.StringVar()
    Entry(stu_add_win,textvariable=user_phone,width=15).grid(row=2,column=1)
    #下拉列表

    # province_text=tk.StringVar() #不同处
    Label(stu_add_win, text='省份', width=10).grid(row=3, column=0)
    provinces=['河北','上海','河南','四川']

    # province_comb=Combobox(stu_add_win,width=13,textvariable=province_text,values=provinces,state='readonly')
    province_comb = Combobox(stu_add_win, width=13, values=provinces, state='readonly')

    province_comb.current(0)
    province_comb.grid(row=3,column=1)



root=Tk()
root.title('主窗体')
root.geometry('300x500+500+100')
#自定义菜单
menuBar=Menu(master=root)
root.configure(menu=menuBar)
stu_menu=Menu(menuBar,tearoff=0)
stu_menu.add_command(label='添加',command=pop_add_stu_win)
stu_menu.add_command(label='查询',command='')
menuBar.add_cascade(label='学生',menu=stu_menu)



root.mainloop()

img

成功代码


#菜单组件
import time
from tkinter import Menu,Tk,Toplevel,Label,Entry,Button
import tkinter as tk
from tkinter.ttk import Combobox,Radiobutton
#添加学生信息
def pop_add_stu_win():
    stu_add_win=Toplevel()
    stu_add_win.title('添加学生')
    width=250
    height=300
    screen_width,screen_height=stu_add_win.maxsize()
    stu_add_win.geometry('%dx%d+%d+%d'%(width,height,(screen_width-width)/2,(screen_height-height)/2))
    #添加组件
    Label(stu_add_win,text='姓名',width=10).grid(row=1,column=0)
    user_name =tk.StringVar()
    Entry(stu_add_win,textvariable=user_name,width=15).grid(row=1,column=1)
    Label(stu_add_win,text='电话',width=10).grid(row=2,column=0)
    user_phone =tk.StringVar()
    Entry(stu_add_win,textvariable=user_phone,width=15).grid(row=2,column=1)
    #下拉列表

    # province_text=tk.StringVar()
    Label(stu_add_win, text='省份', width=10).grid(row=3, column=0)
    provinces=['河北','上海','河南','四川']

    # province_comb=Combobox(stu_add_win,width=13,textvariable=province_text,values=provinces,state='readonly')

    province_comb = Combobox(stu_add_win, width=13, values=provinces, state='readonly')

    province_comb.current(0)
    province_comb.grid(row=3,column=1)



root=Tk()
root.title('主窗体')
root.geometry('300x500+500+100')
#自定义菜单
menuBar=Menu(master=root)
root.configure(menu=menuBar)
stu_menu=Menu(menuBar,tearoff=0)
stu_menu.add_command(label='添加',command=pop_add_stu_win)
stu_menu.add_command(label='查询',command='')
menuBar.add_cascade(label='学生',menu=stu_menu)



root.mainloop()

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在你的代码中,你已经通过调用province_comb.current(0)将下拉列表的默认值设置为了第一个元素,但是在调用grid方法之前,你没有通过province_comb的textvariable属性将默认值绑定到一个变量上。

你可以在调用province_comb.current(0)之后,将选中的值赋值给一个变量,如下所示:

province_text = tk.StringVar(value=provinces[0])
province_comb = Combobox(stu_add_win, width=13, textvariable=province_text, values=provinces, state='readonly')

然后在调用grid方法之前,将province_comb和province_text绑定起来,如下所示:

province_comb['textvariable'] = province_text
province_comb.grid(row=3, column=1)

这样就可以设置默认值了。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7735666
  • 这篇博客也不错, 你可以看下异常处理、tkinter编程
  • 除此之外, 这篇博客: tkinter实现屏幕窗口弹幕中的 完整代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • class BalloonTk():#使用tk窗口来实现弹窗效果,目前是覆盖整个屏幕
        
        def __init__(self,text,fg='',bg='',alpha=1):
            self.fg=fg
            self.bg=bg
            self.text=text
            self.alpha=alpha
        
        def destroy(self,event):#点击关闭
            self.a.destroy()
        
        def show(self,heigh,nobg=False):#移动模块
            alpha=self.alpha
            fg=self.fg
            bg=self.bg
            text=self.text
            a=Tk()
            a.bind('<Button-1>',self.destroy)#点击删除
            a.overrideredirect(True)
            a.attributes('-alpha',alpha)
            a.attributes('-topmost',True)
            self.a=a
            word=Label(a,text=text,font=('宋体',13),fg=fg,bg=bg).pack(fill='both')
            if nobg==True:
                a.attributes('-transparentcolor',bg)
            for i in range(0,a.winfo_screenwidth(),2)[::-1]:
                try:#如果被点击删除,则退出线程
                    a.update()
                    a.geometry('+'+str(i)+'+'+str(heigh))
                    slp(0.03)
                except:
                    return
            a.destroy()
        
        def start(self,heigh,nobg=False):#多线程启动弹幕
            Thread(target=lambda:self.show(heigh,nobg)).start()