微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Tkinter循环可在INSERT SQLITE之前验证输入

如何解决Python Tkinter循环可在INSERT SQLITE之前验证输入

我正在尝试验证条目,然后再将该信息插入sqlITE数据库我有一个带按钮的主Tkinter画布。在这种情况下,该按钮将打开另一个窗口,用户可以在其中输入必填字段。我的想法是避免用户提交空白字段。 我设法有一个消息框说出了什么问题,但是一旦我按“确定”,代码就会继续并关闭输入窗口。 第1步-打开输入窗口:

quantile

第2步-将数据提交到sqlITE数据库

def open_add_ship_window():
    global ship_window
    ship_window = Tk()
    ship_window.title('Add Ship')
    ship_window.iconbitmap(
        'C:/Users/eduardo.js.ramos/Desktop/VSCode/img directory/ship_icon_1.ico')
    ship_window.geometry("400x200")
    global ship_name_ship_window
    global ship_imo_ship_window
    global ISM_ship_window
    global ISM_IMO_ship_window
    # Create Text Boxes
    ship_name_ship_window = Entry(ship_window,width=40)
    ship_name_ship_window.grid(row=0,column=1,pady=(10,0))
    ship_imo_ship_window = Entry(ship_window,width=40)
    ship_imo_ship_window.grid(row=1,column=1)
    ISM_ship_window = Entry(ship_window,width=40)
    ISM_ship_window.grid(row=2,column=1)
    ISM_IMO_ship_window = Entry(ship_window,width=40)
    ISM_IMO_ship_window.grid(row=3,column=1)
    # Create Labels
    ship_name_ship_window_label = Label(
        ship_window,text="Vessel Name")
    ship_name_ship_window_label.grid(row=0,column=0,0))
    ship_imo_ship_window_label = Label(
        ship_window,text="Vessel IMO")
    ship_imo_ship_window_label.grid(row=1,column=0)
    ISM_ship_window_label = Label(ship_window,text="ISM Company")
    ISM_ship_window_label.grid(row=2,column=0)
    ISM_IMO_ship_window_label = Label(
        ship_window,text="ISM IMO Number")
    ISM_IMO_ship_window_label.grid(row=3,column=0)
    # Create Save New Ship Button
    save_ship_btn = Button(
        ship_window,text="Add New Ship",command=add_ship)
    save_ship_btn.grid(row=4,columnspan=2,pady=10,padx=10,ipadx=50)

你们有什么建议吗?

解决方法

  • 您应将add_ship()中的最后三行移到if块中
  • or语句中将and更改为if
  • 删除while循环

下面是修改后的add_ship()

def add_ship():
    # get the information
    ship_name = ship_name_ship_window.get().strip()
    ship_imo = ship_imo_ship_window.get().strip()
    ism_ship = ISM_ship_window.get().strip()
    ism_imo = ISM_IMO_ship_window.get().strip()
    # if all is input
    if ship_name and ship_imo and ism_ship and ism_imo:
        # connect to database
        conn = sqlite3.connect('PSC.sdb')
        # create cursor
        c = conn.cursor()
        c.execute("INSERT INTO ships VALUES (:name,:imoship,:ism,:ismimo,NULL,NULL)",{
                      'name': ship_name,'imoship': ship_imo,'ism': ism_ship,'ismimo': ism_imo
                  })
        conn.commit()
        conn.close()
        ship_window.destroy()
    else:
        messagebox.showwarning(title='Review Needed',message='Please complete all fieds.')
,

在关闭消息框后,主循环结束,因此您可能必须将上述代码放入循环中,以使一旦消息框显示错误,循环就不会结束。

一种可能的方式可能是:

<link rel="stylesheet" href="css/styles.css"> is my code in header.ejs

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。