首页 > 解决方案 > Tkinter 条目小部件更新花括号中的值

问题描述

我可以使用 textvariables 更新 tKinter 条目小部件框...问题是它在我想要的数据中添加了括号“{}”...

def showRecord(self):
    connection = sqlite3.connect("../employee.db")
    connection.text_factory = sqlite3.OptimizedUnicode
    cursor = connection.cursor ()
    cursor.execute ( '''SELECT "Scheduled Shift" FROM employee_details WHERE Ecode = "5568328"''' )
    items = cursor.fetchall ()
    self.Employee1_FirstDay_ActualShift.set(items[0])
    self.Employee1_SecondDay_ActualShift.set(items[1])
    self.Employee1_ThirdDay_ActualShift.set(items[2])
    self.Employee1_FourthDay_ActualShift.set(items[3])
    self.Employee1_FifthDay_ActualShift.set(items[4])
    self.Employee1_SixthDay_ActualShift.set(items[5])
    self.Employee1_SeventhDay_ActualShift.set(items[6])
    connection.commit ()
    connection.close ()

寻求帮助请...需要删除那些括号,如图所示。

在此处输入图像描述

标签: pythonsqlitetkinter

解决方案


这样做的原因是因为您将字符串变量的值设置为列表。Tkinter 是一个围绕 tcl/tk 解释器的瘦包装器,当列表元素包含空格或其他特殊字符时,tcl 使用花括号来保留列表结构时将列表转换为字符串。

解决方案是确保将字符串传递给该set方法。否则列表将被传递给 tcl/tk 并且它将使用它自己的列表到字符串的转换。

在您的情况下,由于items是列表(列)的列表(行)并且每行都有一个列,因此您可以执行以下操作将第零行的第零列插入self.Employee1_FirstDay_ActualShift

row_0 = items[0]
col_0 = row_0[0]
self.Employee1_FirstDay_ActualShift.set(col_0)

将其压缩为一行,结合所有其他行,它看起来像下面这样。我添加了一些额外的空格,以便更容易比较每一行。此外,这假设items有七行,每行至少有一列。

self.Employee1_FirstDay_ActualShift.set(  items[0][0])
self.Employee1_SecondDay_ActualShift.set( items[1][0])
self.Employee1_ThirdDay_ActualShift.set(  items[2][0])
self.Employee1_FourthDay_ActualShift.set( items[3][0])
self.Employee1_FifthDay_ActualShift.set(  items[4][0])
self.Employee1_SixthDay_ActualShift.set(  items[5][0])
self.Employee1_SeventhDay_ActualShift.set(items[6][0])

推荐阅读