簡體   English   中英

在Python tkinter輸入框中插入值時出錯

[英]Error while inserting a value in Python tkinter Entry box

我正在制作一個程序,該程序從用戶那里獲取值,然后使用sqlite3數據庫將該值附加到db文件中。 但是,當將值插入輸入框時,發生了奇怪的錯誤。

import sqlite3,time,datetime
from Tkinter import *

def create_table():
    conn = sqlite3.connect("medicaps.db")
    c = conn.cursor()
    c.execute("CREATE TABLE data(NAME TEXT,ENROLLMENT_NUMBER INT,MARKS INT,GRADE TEXT,UNIXTIME REAL ,DATETIME TEXT)")



class Application(Frame):


    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()



    def create_widgets(self):
        Label(self,text = "Welcome to the database entry program.").grid(row = 0,column = 0,columnspan = 2,sticky = W)

        Label(self,text = "Name : ").grid(row = 1,column = 0,sticky = W)
        Label(self,text = "Enrollment number : ").grid(row = 2,column = 0,sticky = W)
        Label(self,text = "Marks : ").grid(row = 3,column = 0,sticky = W)
        Label(self,text = "Grade : ").grid(row = 4,column = 0,sticky = W)

        self.name = Entry(self)
        self.name.grid(row = 1,column = 1)

        self.number = Entry(self)
        self.number.grid(row = 2,column = 1)

        self.marks = Entry(self)
        self.marks.grid(row = 3,column = 1)

        self.grade = Entry(self)
        self.grade.grid(row = 4,column = 1)

        self.text = Text(self,width = 35,height = 25,wrap = WORD)
        self.text.grid(row = 6,column = 0,columnspan = 2,sticky = W)

        Button(self,text = "Submit",command = self.reveal).grid(row = 5,column = 0,sticky = W)

    def reveal(self):
        conn = sqlite3.connect("medicaps.db")
        c = conn.cursor()
        unix = time.time()
        date = str(datetime.datetime.fromtimestamp(int(time.time())).strftime("%Y-%M-%d %H:%M:%S"))
        name = self.name.get()
        number = self.number.get()
        marks = self.marks.get()
        grade = self.grade.get()

        self.text.insert(0.0,"yoyo")

        try:
            number = int(number)
        except(ValueError):
            error_n = "Invalid Input"
            self.number.insert(0.0,error_n)

        try:
            marks = int(number)
        except(ValueError):
            error_m = "Invalid Input"
            self.marks.insert(0.0,error_m)

        c.execute("INSERT INTO data(NAME,ENROLLMENT_NUMBER,MARKS,GRADE,UNIXTIME,DATETIME) VALUES = (?,?,?,?,?,?)",
                  (name,number,marks,grade,unix,date))
        conn.commit()
        message = "Value appended successfully"
        self.text.delete(0.0,END)





root = Tk()


root.title("Dataentry")
root.geometry("500x750")

frame = Application(root)

root.mainloop()

引發以下錯誤

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1536, in __call__
    return self.func(*args)
  File "C:\Users\sahib navlani\Desktop\New folder\vdsf.py", line 62, in reveal
    self.number.insert(0.0,error_n)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 2517, in insert
    self.tk.call(self._w, 'insert', index, string)
  TclError: bad entry index "0.0"

該錯誤告訴您確切的問題是什么。 0.0是一個錯誤的索引。 self.number是一個Entry ,索引是從零開始的整數。

您還嘗試對Text小部件使用相同的索引,這也是無效的。 Text窗口小部件索引是格式為<line>。<char>的字符串( 不是浮點數),其中<line>是從1 (一)開始的數字,而<char>0 (零)開始的數字。 因此, Text小部件的第一個索引是字符串"1.0"

閱讀與您的代碼有關的追溯。 self.number是一個Entry()。 在這個精細的參考文獻中定義了一個條目索引,我建議人們使用書簽。 由於Entry小部件包含一行文本,因此此類的索引是single int。 嘗試使用0而不是0.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM