robertiii
Mar 13, 2018 - 14:47
I have no idea why nothing is called when I tap the cell. The cells populate correctly with data and everything works, including delete, except for selecting.
# coding: utf-8
import ui
import sqlite3
from master import master_root_view
from detail import detail_root_view
data = []
def initDatabase():
try:
conn = sqlite3.connect('questions.db')
c = conn.cursor()
c.execute('''CREATE TABLE questions (question, correctAnswer, option1, option2, option3, option4, level, id)''')
conn.commit()
conn.close()
except:
pass
def getQuestions():
try:
conn = sqlite3.connect('questions.db')
conn.row_factory = lambda cursor, row: row[0]
c = conn.cursor()
ids = c.execute('SELECT id FROM questions').fetchall()
conn.close()
data.clear()
for id in ids:
if id not in data:
data.append(int(id))
return ids
except:
pass
def missing_elements(L):
start, end = L[0], L[-1]
return sorted(set(range(start, end + 1)).difference(L))
class questionList(object): #also acts as the data_source. Can be separate, but this is easier.
def __init__(self,items):
getQuestions()
self.items = items
self.currentNumLines = len(items)
self.currentTitle = None
self.currentRow = None
self.selectedSong = None
def tableview_did_select(self, tableview, section, row):
# Called when a row was selected.
print('Tapped Cell')
tableview.reload_data() # forces changes into the displayed list
def tableview_did_deselect(self, tableview, section, row):
# Called when a row was de-selected (in multiple selection mode).
pass
def tableview_title_for_delete_button(self, tableview, section, row):
# Return the title for the 'swipe-to-***' button.
return 'Delete' # or 'bye bye' or 'begone!!!'
def tableview_number_of_sections(self, tableview):
# Return the number of sections (defaults to 1). Someone else can mess with
# sections and section logic
return 1
def tableview_number_of_rows(self, tableview, section):
# Return the number of rows in the section
#getQuestions()
return len(data) #needed to be in sync with displayed version,
def tableview_cell_for_row(self, tableview, section, row):
# Create and return a cell for the given section/row
cell = ui.TableViewCell()
conn = sqlite3.connect('questions.db')
c = conn.cursor()
question = c.execute('SELECT question FROM questions WHERE id=?', (1,)).fetchone()[0]
conn.close()
cell.text_label.text = str(question)
return cell
def tableview_title_for_delete_button(self, tableview, section, row):
# Return the title for the 'swipe-to-***' button.
return 'Delete' # or 'bye bye' or 'begone!!!'
def tableview_can_delete(self, tableview, section, row):
# Return True if the user should be able to delete the given row.
return True # you can use logic to lock out specific ("pinned" entries)
def tableview_can_move(self, tableview, section, row):
# Return True if a reordering control should be shown for the given row (in editing mode).
return True # see above
def tableview_delete(self, tableview, section, row):
# Called when the user confirms deletion of the given row.
conn = sqlite3.connect('questions.db')
c = conn.cursor()
c.execute('DELETE FROM questions WHERE id = ?',(data[row],))
conn.commit()
conn.close()
data.pop(row)
self.currentNumLines -= 1 # see above regarding hte "syncing"
tableview.delete_rows((row,)) # this animates the deletion could also 'tableview.reload_data()'
def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
# Called when the user moves a row with the reordering control (in editing mode).
self.displayItems = listShuffle(self.items,from_row,to_row)
# cynchronizes what is displayed with the underlying list
def setup():
splitView = ui.View()
splitView.width = 800
splitView.height = 800
splitView.background_color='white'
splitView.add_subview(master_root_view)
splitView.add_subview(detail_root_view)
master_root_view.width = 600
master_root_view.height = splitView.height
master_root_view.flex='H'
detail_root_view.flex='WHR'
detail_root_view.x+=master_root_view.width
detail_root_view.width=splitView.width-master_root_view.width
detail_root_view.height = splitView.height
questions = master_root_view['questionsList']
questionDel = questionList(data)
questions.data_source = questions.data_source = questionDel
questions.reload()
initDatabase()
splitView.present('landscape')
return splitView
setup()