2013-02-01 86 views
0

我試圖通過documenation讓我的方式,但我有一個困難時期試圖找到三個具體的東西。文本字段與Tkinter的

  1. 什麼是文字輸入。
  2. 如何獲得在文本輸入的文本。
  3. 如何設置的文本輸入的文本。

基本上我想這樣做,因爲我只是在這個例子中對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代碼。我想我應該檢查這些:

但據我所知沒有,要麼是複雜的,我是傻還是我跳過一些信息的重要位。很可能它是所有前者的組合。

謝謝。對不起,如果我做錯了什麼。歡迎所有回覆和反饋。

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() 

的代碼可能不是你所見過的最清晰的代碼,但我的小腦袋試圖掌握一些新的概念。我認爲這可能對某些人有幫助。

回答

3

官方文檔始終可在http://docs.python.org/2/library/tkinter.html找到。此外,搜索如「巨蟒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() 
+0

謝謝你的回答。我認爲這正是我需要通過學習曲線中的初始步驟來獲得的,現在一切都變得有意義,或者至少有很多事情。我已經在你的代碼工作,並做出我現在增加了初始後的新版本。再次感謝你。 – Trylks