python 显示数据库数据tk_在TK python中显示SQLite输出

我正在尝试从我的数据库中获取一行,如果1显示在tk文本小部件上,如果是0,则从显示中删除。在

我到目前为止的代码显示了一张卡的行。当我扫描秒时,我得到一个错误。在SQLite objects created in a thread can be used in that same thread.The object was created in thread id 6740 and this is thread id 6320

Traceback (most recent call last):

File "C:\rfid\main2.py", line 66, in

cardmonitor.addObserver( cardobserver )

File "C:\Python27\lib\site-packages\smartcard\CardMonitoring.py", line 105, in addObserver

observer.update(self, (self.rmthread.cards, []))

File "C:\rfid\main2.py", line 56, in update

a(tag)

File "C:\rfid\main2.py", line 25, in a

root.mainloop()

File "C:\Python27\lib\lib-tk\Tkinter.py", line 1017, in mainloop

self.tk.mainloop(n)

keyboardInterrupt

主代码如下

^{pr2}$

更新:

从下面的答案,我现在已经厌倦了下面的内容。在

感动连接光标但还是一样。不同的错误是Coursor is not definedimport sqlite3 as db

import os

from prettytable import from_db_cursor

from smartcard.scard import *

from smartcard.util import toHexString

from prettytable import from_db_cursor

from smartcard.CardMonitoring import CardMonitor, CardObserver

import time

from Tkinter import Tk, BOTH, INSERT, Text

def main(tag):

q = "SELECT * FROM CARDS WHERE TAG=?"

up = "UPDATE CARDS SET FLAG = (CASE WHEN FLAG=0 THEN 1 ELSE 0 END) WHERE TAG=?"

id = "SELECT * FROM CARDS WHERE TAG=?"

cursor.execute(q, (tag,))

cursor.execute(up, (tag,))

conn.commit()

for row in cursor.execute(id, (tag,)):

print row [1] + " has been checked " + ('in' if row[2] else 'out')

r1 = str(row[1])

r2 = str(row[2])

mseg = str(r1 + r2)

text_widget = Text(root, font='times 40 bold', bg='Green')

text_widget.pack(fill=BOTH, expand=0)

text_widget.tag_configure('tag-center', wrap='word', justify='center')

text_widget.insert(INSERT, r1 + r2, 'tag-center')

root.mainloop()

class printobserver( CardObserver ):

cursor = conn.cursor()

def update( self, observable, (addedcards, removedcards) ):

previousIdString = ""

idString = ""

for card in addedcards:

if addedcards:

hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)

assert hresult==SCARD_S_SUCCESS

hresult, readers = SCardListReaders(hcontext, [])

assert len(readers)>0

reader = readers[0]

hresult, hcard, dwActiveProtocol = SCardConnect(

hcontext,

reader,

SCARD_SHARE_SHARED,

SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)

hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04])

v = toHexString(response, format=0)

tag = str(v)

main(tag)

conn = db.connect('cards3.db')

root = Tk()

while True:

cardmonitor = CardMonitor()

cardobserver = printobserver()

cardmonitor.addObserver( cardobserver )

cardmonitor.deleteObserver( cardobserver )

time.sleep( 2 )

也累了放在主和更新,但还是一样的错误def main(tag):

cursor = conn.cursor

q = "SELECT * FROM CARDS WHERE TAG=?"

up = "UPDATE CARDS SET FLAG = (CASE WHEN FLAG=0 THEN 1 ELSE 0 END) WHERE TAG=?"

id = "SELECT * FROM CARDS WHERE TAG=?"

cursor.execute(q, (tag,))

cursor.execute(up, (tag,))

conn.commit()

for row in cursor.execute(id, (tag,)):

print row [1] + " has been checked " + ('in' if row[2] else 'out')

r1 = str(row[1])

r2 = str(row[2])

mseg = str(r1 + r2)

text_widget = Text(root, font='times 40 bold', bg='Green')

text_widget.pack(fill=BOTH, expand=0)

text_widget.tag_configure('tag-center', wrap='word', justify='center')

text_widget.insert(INSERT, r1 + r2, 'tag-center')

root.mainloop()

def update( self, observable, (addedcards, removedcards) ):

previousIdString = ""

idString = ""

for card in addedcards:

if addedcards:

hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)

assert hresult==SCARD_S_SUCCESS

hresult, readers = SCardListReaders(hcontext, [])

assert len(readers)>0

reader = readers[0]

hresult, hcard, dwActiveProtocol = SCardConnect(

hcontext,

reader,

SCARD_SHARE_SHARED,

SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)

hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04])

v = toHexString(response, format=0)

tag = str(v)

main(tag)

cursor = conn.cursor

如果我去掉所有的TK内容并把cursor = conn.cursor放在while True:上面,我就可以继续扫描卡片,没有问题def main(tag):

cursor = conn.cursor

q = "SELECT * FROM CARDS WHERE TAG=?"

up = "UPDATE CARDS SET FLAG = (CASE WHEN FLAG=0 THEN 1 ELSE 0 END) WHERE TAG=?"

id = "SELECT * FROM CARDS WHERE TAG=?"

cursor.execute(q, (tag,))

cursor.execute(up, (tag,))

conn.commit()

for row in cursor.execute(id, (tag,)):

print row [1] + " has been checked " + ('in' if row[2] else 'out')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值