【问题标题】:Append combobox values from textbox using a button使用按钮从文本框中附加组合框值
【发布时间】:2021-01-06 22:12:08
【问题描述】:

我使用 Python 创建了一个带有空 ComboBox、TextBox 和一个按钮的框架。我的 ComboBox 值取自初始为空的 List acitivity_list。我正在寻找一种解决方案,用户可以在其中将文本插入 TextBox 并附加 List activity_list,以便通过单击 Button 出现在 ComboBox 中。

我未能实现 append() 函数来更新列表。我的目标是有一个功能,我在 TextBox 中写入活动的名称,单击“添加”按钮,它会出现在我的 ComboBox 中。

谢谢。

from tkinter import *
from tkinter import ttk


class Activity:
    def __init__(self,root):
        self.root=root
        self.root.title("database")
        self.root.geometry("1350x700+0+0")
        title=Label(self.root, text="Daily Activities Database", font=("Calibri",40,"bold"))
        title.pack(side=TOP)

#ComboBox 
        activity_list = []
        Frame1=Frame(self.root,bd=4, relief=RIDGE)
        Frame1.place(x=20, y=75, width=355, height=560 )
        combo_activity=ttk.Combobox(Frame1, font=("Calibri",20))
        combo_activity["values"]= activity_list
        combo_activity.grid(row=10, column=1, padx=20, pady=10)
#Textbox
        txt_act=Entry(Frame1, font=("Calibir",20))
        txt_act.grid(row=11, column=1, padx=20, pady=20)
#Button
        bt1 = ttk.Button(Frame1, text = "Add")
        bt1.grid(row=12, column=1, padx=20, pady=20)

root=Tk()
ob=Activity(root)
root.mainloop()  

【问题讨论】:

    标签: python list tkinter combobox append


    【解决方案1】:

    添加一个在点击Add时触发的实例方法。在函数中,将用户输入添加到activity_list,然后更新combo_activityvalues选项。

    但是,需要将一些局部变量改为实例变量,否则在新函数内部无法访问:

    from tkinter import *
    from tkinter import ttk
    
    class Activity:
        def __init__(self, root):
            self.root = root
            self.root.title("database")
            self.root.geometry("1350x700+0+0")
            title=Label(self.root, text="Daily Activities Database", font=("Calibri",40,"bold"))
            title.pack(side=TOP)
    
            Frame1 = Frame(self.root,bd=4, relief=RIDGE)
            Frame1.place(x=20, y=75, width=355, height=560 )
    
            #ComboBox 
            self.activity_list = []
            self.combo_activity = ttk.Combobox(Frame1, font=("Calibri",20))
            self.combo_activity["values"] = self.activity_list
            self.combo_activity.grid(row=10, column=1, padx=20, pady=10)
            #Textbox
            self.txt_act = Entry(Frame1, font=("Calibir",20))
            self.txt_act.grid(row=11, column=1, padx=20, pady=20)
            #Button
            bt1 = ttk.Button(Frame1, text="Add", command=self.add_activity) # added command option
            bt1.grid(row=12, column=1, padx=20, pady=20)
    
        def add_activity(self):
            activity = self.txt_act.get().strip()
            if activity:
                self.activity_list.append(activity)
                self.combo_activity["values"] = self.activity_list
    
    root = Tk()
    ob = Activity(root)
    root.mainloop()
    

    【讨论】:

      【解决方案2】:

      感谢您的帮助。我已经像这样调整了代码,框架的按钮消失了。也许缩进有问题?

      from tkinter import *
      from tkinter import ttk
      
      
      class Activity:
          def __init__(self,root):
              self.root=root
              self.root.title("database")
              self.root.geometry("1350x700+0+0")
              title=Label(self.root, text="Daily Activities Database", font=("Calibri",40,"bold"))
              title.pack(side=TOP)
           
      #ComboBox 
              activity_list = []
              Frame1=Frame(self.root,bd=4, relief=RIDGE)
              Frame1.place(x=20, y=75, width=355, height=560 )
              combo_activity=ttk.Combobox(Frame1, font=("Calibri",20))
              combo_activity["values"]= activity_list
              combo_activity.grid(row=10, column=1, padx=20, pady=10)
      #Textbox
              txt_act=Entry(Frame1, font=("Calibir",20))
              txt_act.grid(row=11, column=1, padx=20, pady=20)
      #Button
      def add_task(self):
              activity = txt_act.get()
              activity_list.append(activity)
              return activity_list
          
              bt1 = ttk.Button(Frame1, text = "Add")
              bt1.grid(row=12, column=1, padx=20, pady=20, command=add_task)
      
      
      root=Tk()
      ob=Activity(root)
      root.mainloop()
      

      【讨论】:

      • 这个空间是用来回答的。考虑在 repl.it 中发布更多问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 2016-03-25
      相关资源
      最近更新 更多