如何在 python 中使用 MySql 数据创建交互式列表

问题描述

我在我的 python 代码中使用了 Tkinter,而不是显示站点中可用房间列表的代码,它显示一个使用 Entry 的列表,导致打印的列表被更改而不是保持固定。有没有办法编辑代码,以便它可以打印出一个按钮列表,我可以选择为该房间打开问题。

sitename3_info = sitename.get()
# the label should print all of the rooms in the site that was inputted in the audit function
cursor = cnn.cursor()
# retrieves the siteID from the inputted site name
siteID_fetch2 = "SELECT siteID FROM Sites WHERE siteName = %s"
cursor.execute(siteID_fetch2,[sitename3_info])
siteID_fetch2 = cursor.fetchall()
print(siteID_fetch2[0][0])
# searches for all the rooms for the site that was inputted
room = "SELECT roomname FROM rooms WHERE siteID_fk2 = %s"
cursor.execute(room,[siteID_fetch2[0][0]])
printrooms = cursor.fetchall()
print(printrooms[0][0])
# prints out a list of rooms in the site
i=0
for rooms in printrooms:
    for j in range(len(rooms)):
        e = Entry(screen13,width=10,fg='blue')
        e.grid(row=i,column=j)
        e.insert(END,rooms[j])
    i=i+1

解决方法

您可以创建按钮而不是 Entry 小部件:

def action(room):
    print(room)
    # do whatever you want on the room

# assume OP code is inside a function
def search():
    sitename3_info = sitename.get().strip()
    if sitename3_info:
        with cnn.cursor() as cursor:
            # combine the two SQL statements into one
            sql = ("SELECT roomname FROM rooms,Sites "
                   "WHERE rooms.siteID_fk2 = Sites.siteID AND siteName = %s")
            cursor.execute(sql,[sitename3_info])
            rooms = cursor.fetchall()
        # remove previous result (assume screen13 contains only result)
        for w in screen13.winfo_children():
            w.destroy()
        if rooms:
            for i,row in enumerate(rooms):
                roomname = row[0]
                btn = Button(screen13,text=roomname,command=lambda room=roomname: action(room))
                btn.grid(row=i,column=0)
        else:
            Label(screen13,text="No room found").grid()

更新:不使用上下文管理器的示例:

def search():
    sitename3_info = sitename.get().strip()
    if sitename3_info:
        cursor = cnn.cursor()
        # combine the two SQL statements into one
        sql = ("SELECT roomname FROM rooms,Sites "
               "WHERE rooms.siteID_fk2 = Sites.siteID AND siteName = %s")
        cursor.execute(sql,[sitename3_info])
        rooms = cursor.fetchall()
        # remove previous result (assume screen13 contains only result)
        for w in screen13.winfo_children():
            w.destroy()
        if rooms:
            for i,text="No room found").grid()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...