我试图通过文档,但我很难找到三个具体的东西。
- 什么是文本输入。
- 如何获取文本输入中的文本。
- 如何在文本输入上设置文本。
基本上,我想像我在这个javascript的例子中所做的那样(它非常简单):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SmallForm</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>var db = openDatabase('mydb', '1.0', 'temporal database', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE foo (id unique, field1 text, field2 text)');
});
saveData = function(){
db.transaction(function (tx) {
var id = $('input[name=id]').val();
var field1 = $('input[name=field1]').val();
var field2 = $('input[name=field2]').val();
tx.executeSql('insert or replace into foo values (?, ?, ?)', [id , field1, field2]);
});
};
loadData = function(){
db.transaction(function (tx) {
var id = $('input[name=id]').val();
tx.executeSql('select * from foo where id =?', [id],function (tx, results) {
var len = results.rows.length;
if (len != 1){
var text = len > 1? "bad data" : "no data";
$('input[name=field1]').val(text);
$('input[name=field2]').val(text);
}
else {
$('input[name=field1]').val(results.rows.item(0).field1);
$('input[name=field2]').val(results.rows.item(0).field2);
}
});
});
};
</script>
</head>
<body>
<div class="line">ID:<input type="text" name="id" value="Introduce the ID first"><input type="button" onclick="loadData()" value="Load"></div>
<div class="line">Field1:<input type="text" name="field1" value="some field"></div>
<div class="line">Field2:<input type="text" name="field2" value="another field"></div>
<div class="line"><input type="button" onclick="saveData()" value="Save"></div>
</body>
</html>
我找不到这个Python文档,我不明白Tcl/Tk文档如何映射到Python代码。我想我应该检查这些:
- http://www.tcl.tk/man/tcl8.4/TclCmd/contents.htm
- http://www.tcl.tk/man/tcl8.4/TkCmd/contents.htm
但我什么都不懂,要么很复杂,要么我很愚蠢,要么我跳过了一些重要的信息。很可能是前者的所有结合。
谢谢。对不起,如果我做错了什么。欢迎所有回复和反馈。
PD:我一直在研究@mmgp的代码,我制作了这个:
import sqlite3, tkinter as tk
def save_data():
insertQuery = 'insert or replace into allData values(%s)'%(','.join(map(lambda x:'?',fields)))
cursor.execute(insertQuery, tuple(map(lambda x: variables[x].get(), fields)))
db.commit()
def load_data():
cursor.execute('select * from allData where %s = ?'%fields[0], [variables[fields[0]].get()])
row = cursor.fetchone()
if row is None:
for f in fields:
variables[f].set("Bad data request")
return
for i in range(len(fields)):
variables[fields[i]].set(row[i])
root = tk.Tk()
root.title('Fielder2013')
fields = ['id', 'field1', 'field2']
variables = {}
buttons = {'Load':load_data, 'Save':save_data}
dfields = {}
for i in range(len(fields)):
e = fields[i]
dfields[e] = (tk.Label(text=e), tk.Entry())
dfields[e][0].grid(row=i, column=0)
dfields[e][1].grid(row=i, column=1)
variables[e] = tk.StringVar()
dfields[e][1]["textvariable"] = variables[e]
i = 0
for e in buttons:
c = buttons[e]
buttons[e] = tk.Button(text=e)
buttons[e]['command'] = c
buttons[e].grid(row = i, column=2)
i+=1
with sqlite3.connect('database.sqlite3') as db:
cursor = db.cursor()
cursor.execute('create table if not exists allData (%s text unique%s)'%(
fields[0], ''.join(map(lambda e: ', %s text'%e, fields[1:]))))
root.mainloop()
db.commit()
代码可能不是你见过的最清晰的代码,但我的小脑袋试图掌握一些新概念。我认为这对某人可能会有所帮助。
官方文档始终可以在 http://docs.python.org/2/library/tkinter.html 找到。此外,搜索像"python tkinter"这样的术语会返回很多其他地方的有用文档。
下面是一个示例,该示例几乎不执行任何操作,但无需调用某些数据库即可复制代码。
import Tkinter
def save_data(form):
for widget in form:
print widget.get()
def load_data(id_value, form):
for i, widget in enumerate(form):
widget.delete(0, 'end')
widget.insert(0, id_value * (i + 2))
root = Tkinter.Tk()
lbl_id = Tkinter.Label(text=u'ID')
entry_id = Tkinter.Entry()
entry_load = Tkinter.Button(text=u'Load')
lbl_field1 = Tkinter.Label(text=u'Field 1')
entry_field1 = Tkinter.Entry()
entry_save = Tkinter.Button(text=u'Save')
lbl_id.grid(row=0, column=0)
entry_id.grid(row=0, column=1)
entry_load.grid(row=0, column=2)
lbl_field1.grid(row=1, column=0)
entry_field1.grid(row=1, column=1)
entry_save.grid(row=2, column=2)
form = [entry_field1]
entry_load['command'] = lambda: load_data(entry_id.get(), form)
entry_save['command'] = lambda: save_data(form)
root.mainloop()