【发布时间】:2018-04-20 09:26:25
【问题描述】:
我在尝试从 Tkinter 条目中获取一些值时遇到了一个奇怪的问题。基本上,如果在条目中我有一个无 ascii 值并使用 get() 内容,有时我有一个正确的 unicode 字符串,有时我有一个没有规范 'u' 的 ascii 字符串 a-la unicode。这是我的代码:
def create():
try:
cols = []
values = []
for name in names:
if (pk <> name):
if (name in fk_columns):
cols.append(name)
values.append(box[name].get())
else:
cols.append(name)
values.append(entry[name].get())
print values
dbutils.create(mDBname, mTable,cols,values)
frame.master.destroy()
tkMessageBox.showinfo("New record", "Record created")
scrolled_view(root,mDBname,mTable,'g',0, editable)
except Exception, err:
tkMessageBox.showerror("Error", err)
def update():
try:
cols = []
new_values = []
old_values = []
i = 0
for name in names:
if (name in fk_columns):
cols.append(name)
new_values.append(box[name].get())
else:
cols.append(name)
new_values.append(entry[name].get())
if rows[record][i] == None:
old_values.append('')
else:
old_values.append(rows[record][i])
i = i + 1
print new_values
dbutils.update(mDBname, mTable, cols, new_values, old_values)
frame.master.destroy()
tkMessageBox.showinfo("Update", "Record updated")
scrolled_view(root,mDBname,mTable,'g',0, editable)
except Exception, err:
tkMessageBox.showerror("Error", err)
所以问题是,如果我使用“create”函数并且我有一个值为“John Canà”的条目,当我在 shell 中打印值时(请注意调用 dbutils 之前的“打印值” ) 我得到了:
[u'John Can\xe0', 'Amministrazione']
并且该功能正常工作。
当我使用更新功能时,即使只更新第二个值而不是 python shell 上带有“John Canà”的值(在调用 dbutils 之前调用 print new_values)我得到了:
['17', 'John Can\xe0', 'Marketing']
字符串 'John Can\xe0' 没有 'u'。这最终会产生经典错误“序数不在 128 范围内”。所以我的问题是为什么同一个 Entry.get() 调用会产生这种不同的行为以及如何解决它。提前致谢!
【问题讨论】:
标签: python tkinter unicode-string tkinter-entry