我的代码没有获取我在条目中插入的值

2024-06-16 09:43:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一些代码,使用tkinter检索房间的名称,并使用该名称将房间名称及其所属站点插入SQL数据库。但是,当我运行代码时,它不会从输入框中检索房间名称

有人能帮忙吗

def addroom():
    global screen14
    global roomsinsite
    roomsinsite = StringVar()
    screen14 = Tk()
    screen14.geometry("300x250")
    screen14.title("Insert rooms")
    Label(screen14, text = "Insert room name:", bg = "LightSkyBlue1", width = "300", height = "2").pack()
    Label(screen14, text = "").pack()
    roomsinsite_entry = Entry(screen14, textvariable = roomsinsite)
    roomsinsite_entry.pack()
    Button(screen14, text = "Register room", width = "12", height = "1", command = insertroom).pack()

 

def insertroom():
    sitename4_info = sitename2.get()
    print(sitename4_info)
    roomname1_info = roomsinsite.get()
    print(roomname1_info)
    cursor = cnn.cursor()
    # SQL to select the siteID and insert rooms for that paticular site.
    siteID_fetch3 = "SELECT siteID FROM Sites WHERE siteName = %s"
    cursor.execute(siteID_fetch3, [sitename4_info])
    siteID_fetch3 = cursor.fetchall()
    # print out the values retrieved
    print(siteID_fetch3[0][0])
    insertRooms = "INSERT INTO `rooms`(`siteID_fk2`, `roomname`) VALUES (%s,%s)"
    insertRooms_val = (siteID_fetch3[0][0], roomname1_info)
    cursor.execute(insertRooms, insertRooms_val)
    # print out the rows inserted.
    print(cursor.rowcount)
    cnn.commit()

Tags: textinfo名称cursorpack房间printrooms
1条回答
网友
1楼 · 发布于 2024-06-16 09:43:17

您的代码中可能有多个Tk,这意味着您的StringVar不知道属于哪个Tk。因此,这里有三种可能的解决方案:

  • 避免使用多个Tk并将所有子窗口替换为Toplevel,因此:
screen14 = Toplevel()
roomsinsite = StringVar()
  • 如果您坚持要使用多个Tk实例,则可以为每个StringVar指定master,如:
screen14 = Tk()
roomsinsite = StringVar(master=screen14)
  • 老实说,我不会在条目小部件中使用StringVar,除非我想使用trace,这里如果使用StringVar的唯一目的是获取条目小部件的值,那么将其删除并使用条目小部件的get()方法,如:
roomname1_info = roomsinsite_entry.get()

如果你问我,第一种和第三种方法的结合似乎是最佳实践。同样在这里,即使您没有使用多个Tk,上述方法之一肯定会解决问题(只要在条目中输入了某些内容,然后调用insertroom()

相关问题 更多 >