【问题标题】:Having a problem with adding new information to a CSV file on Tkinter在 Tkinter 上向 CSV 文件添加新信息时出现问题
【发布时间】:2020-07-17 19:42:23
【问题描述】:

我有一个关于 python 的项目我正在研究。 我需要制作一个运行 CSV、matplotlib 和其他模块的程序。 我遇到了一个我无法解决的问题,通过 tkinter 将新信息保存到原始 CSV 文件中

主要问题是“保存到数据库”功能 我的整个代码是:

from tkinter import *
from tkinter.ttk import *
import pandas as pd
from tkinter import messagebox
root = Tk()
root.title('DYR')
root.minsize(700, 500)  # the minimum size of the window
root.geometry('500x500')  # in what resolution the window will open at
root.configure(bg='LightBlue1')

nameLabel = Label(root, text=' Company Name',font=("Arial Bold", 12))
nameLabel.grid(column=2, row=0)
nameInput = Entry(width=30)
nameInput.grid(column=3, row=0)

idLabel= Label(root, text = 'Client ID',font=("Arial Bold", 12))
idLabel.grid(column=2, row=1)
id_input = Entry(width=9)
id_input.grid(column= 3, row=1)
addresslabel= Label(root, text = "Company Address", font=("Arial Bold", 12))
addresslabel.grid(column= 2, row= 2)
addressinput = Entry (width= 50 )
addressinput.grid(column =3 , row = 2)
fieldlabel= Label(root, text= "Filed",font=("Arial Bold", 12))
fieldlabel.grid(column=2 , row =3)
fieldcomobx =  Combobox (root)
fieldcomobx['values']= ("Choose field",'consulting','Medical','Gaming','Cyber')
fieldcomobx.current(0) #set the selected item
fieldans = fieldcomobx.get()
fieldcomobx.grid(column=3, row=3)
numberof = Label (root, text = "Number of employees", font=("Arial Bold", 12))
numberof.grid(column = 2 , row = 4)
numberin = Entry (width= 15)
numberin.grid(column = 3 , row= 4)
contactlabel=Label(root, text = "Contact", font=("Arial Bold", 12))
contactlabel.grid(column=2, row =5)
contactin = Entry (width = 15)
contactin.grid(column=3, row =5)
lastcall = Label (root, text = "Last call ",font=("Arial Bold", 12))
lastcall.grid(column = 2 , row = 6)
lastcallin = Entry (width = 15)
lastcallin.grid(column = 3 , row=6)

def cheker():#func to check if the client exsit
    import pandas as pd
    path = r"C:\Users\HP\PycharmProjects\untitled\Gmar\Gmar_Project.csv"
    companyName = str(nameInput.get())
    df = pd.read_csv(path)
    result = df[df.Company == companyName]
    if len(result) == 0:
        messagebox.showinfo("Cheker", "Not exist, Good luck!")
    else:
        messagebox.showinfo("Cheker", "The client  already exists in the data base!")

btn = Button(root,text="check existence",command= cheker)
btn.grid(column=4, row = 0)

def save_to_db(): #save the information to csv
    path = r"C:\Users\HP\PycharmProjects\untitled\Gmar\Gmar_Project.csv"
    newRow = [str(nameInput.get()), str(id_input.get()), str(addressinput.get()),str(fieldans), str(numberin .get()),str(contactin.get()),str(lastcallin.get())]
    df = pd.read_csv(path)
    df2 = pd.DataFrame(newRow).T
    df2.columns = ['Company','client ID','address','field','Number of employees','contact','last call']  # df.columns
    df = df.append(df2, ignore_index=True)
    df.to_csv(path_or_buf=path, index_label=False, index=False)


endbtn = Button (root, text = "SAVE" ,command = save_to_db())
endbtn.grid(column =3, row=8)
root.mainloop()

【问题讨论】:

  • 您遇到了什么问题? “我遇到了一个我无法解决的问题”有点含糊,我们无法提供帮助。
  • 欢迎来到 Stack Overflow。 @BryanOakley 是对的:您需要准确地告诉我们您得到了什么结果,如果这不是一个明显的错误,那么这与您的预期有何不同。另外,请花时间和精力来创建一个 MINIMAL 示例!您将从努力中学到很多东西,我们将能够为您提供更好的帮助。
  • 你是对的,现在正在编辑,基本上“def save_to_db()”不起作用,每次我尝试保存它时只需添加“选择字段”
  • 你做了什么来调试这个?您是否已验证 df 在附加之前包含您期望的内容?您是否已验证 df2 包含您期望它包含的内容? newRow 呢?你确定它的设置符合你的预期吗?
  • @BryanOakley 是的,但仍然无法判断问题所在

标签: python pandas csv tkinter


【解决方案1】:

问题是您在创建组合框后大约一毫秒设置fieldans。用户将没有机会创建一个部分。

GUI 开发中的一般经验法则是,您不应该在需要数据之前获取数据。

您需要将fieldans = fieldcomobx.get() 移动到save_to_db 内部,以便获得用户输入的值而不是默认值。

您还有一个问题,即您在 GUI 启动时立即调用 save_to_db,而不是在用户有机会输入任何数据之后。

你需要像这样定义endbtn

endbtn = Button (root, text = "SAVE" ,command = save_to_db)

【讨论】:

  • @Dean:我更新了我的答案以包含我发现的另一个问题。
  • 非常感谢,我会继续检查代码并尝试在出现问题之前找出问题,然后再寻求帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2023-04-10
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多