Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sqlite not updating
#14
(May-28-2023, 10:04 AM)angus1964 Wrote:
(May-27-2023, 09:05 PM)menator01 Wrote: I've not ever really messed with tkinters menu or tkraise before so, I gave it a try with some of your code.

import tkinter as tk
import sqlite3 as sq

class Database:
    '''
        Database class handles all the database functions.
        Create, insert, and retrieve
    '''
    def __init__(self):
        self.tables = ('rtbhigh', 'finisheshigh')
        self.connection = sq.connect('highscores.db')
        self.cursor = self.connection.cursor()

    def create_tables(self):
        self.cursor.execute('''
            create table if not exists rtbhigh (
            playername text, score integer
            )
        ''')

        self.cursor.execute('''
            create table if not exists finisheshigh (
            playername text, score integer
            )
        ''')
        self.connection.commit()


    def insert(self, playername, score, table):
        self.cursor.execute(f'insert into {table} (playername, score) values(?,?)', (playername, score))
        self.connection.commit()
            
    def getall(self, table):
        query = self.cursor.execute(f'select * from {table} order by score desc').fetchall()
        print(query)
        return query


class Rtb(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self)
        label = tk.Label(self, text='Rtb Page', bg='pink')
        label.grid(column=0, row=0, sticky='news')


class Main(tk.Frame):
    ''' Main class is the start/landing page '''
    def __init__(self):
        tk.Frame.__init__(self)
        label = tk.Label(self, text='Main Page', bg='gold')
        label.grid(column=0, row=0, sticky='news')


class Finish(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self)
        label = tk.Label(self, text='Finish Page', bg='tomato')
        label.grid(column=0, row=0, sticky='news')


class HighScore(tk.Frame):
    '''
        HighScores class displays all scores
    '''
    def __init__(self, data):
        tk.Frame.__init__(self)
        container = tk.Frame(self)
        container.grid(column=0, row=0, sticky='new')
        container.grid_columnconfigure(0, weight=3)

        header = tk.Label(container, text='High Scores', bg='gray')
        header['font'] = (None, 18, 'bold')
        header['highlightbackground'] = 'black'
        header['highlightcolor'] = 'black'
        header['highlightthickness'] = 1
        header.grid(column=0, row=0, sticky='new', padx=3, pady=(0, 8))

        row = 1
        for name, score in data:
            label = tk.Label(container, text=f'{name.title()}: {score}', bg='lightgray', anchor='w', padx=8)
            label['font'] = (None, 14, 'normal')
            label['highlightbackground'] = 'black'
            label['highlightcolor'] = 'black'
            label['highlightthickness'] = 1
            label.grid(column=0, row=row, sticky='new', ipadx=5, padx=3)
            row += 1


class NewGame(tk.Frame):
    ''' NewGame class page for starting new games '''
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        label = tk.Label(self, text='Start a new game', bg='burlywood')
        label['font'] = (None, 16, 'normal')
        label.grid(column=0, row=0, sticky='new')


class Window(tk.Frame):
    ''' Window class is for the menus and container'''
    def __init__(self, parent):
        self.parent = parent
        tk.Frame.__init__(self, parent)
        parent.title('Test Application')
        parent.columnconfigure(0, weight=1)
        parent.rowconfigure(0, weight=1)

        self.menubar = tk.Menu(parent)
        parent.configure(menu=self.menubar)



class Controller:
    ''' Controller class ties all the classes together '''
    def __init__(self, database, window):
        self.db = database
        self.window = window
        self.db.create_tables()
        # self.db.insert('john doe', 15, self.db.tables[1])
        # self.db.insert('jane doe', 25, self.db.tables[1])
        # self.db.insert('child doe', 5, self.db.tables[1])
        

        # Setup the pages by calling the appropiate class
        page2 = Rtb()
        page2.grid(column=0, row=0, sticky='news')
        page2.grid_columnconfigure(0, weight=3)
        page2.grid_rowconfigure(0, weight=3)

        page3 = Finish()
        page3.grid(column=0, row=0, sticky='news')
        page3.grid_columnconfigure(0, weight=3)
        page3.grid_rowconfigure(0, weight=3)

        page4 = HighScore(self.get_scores())
        page4.grid(column=0, row=0, sticky='news')
        page4.grid_columnconfigure(0, weight=3)
        page4.grid_rowconfigure(0, weight=3)

        page5 = NewGame()
        page5.grid(column=0, row=0, sticky='news')
        page5.grid_columnconfigure(0, weight=3)
        page5.grid_rowconfigure(0, weight=3)

        page1 = Main()
        page1.grid(column=0, row=0, sticky='news')
        page1.grid_columnconfigure(0, weight=3)
        page1.grid_rowconfigure(0, weight=3)

        # Setup the menus and commands
        game_menu = tk.Menu(self.window.menubar, tearoff=0)
        game_menu.add_command(label='New Game', command=page5.tkraise)
        game_menu.add_separator()
        game_menu.add_command(label='Exit', command=self.window.parent.destroy)

        page_menu = tk.Menu(self.window.menubar, tearoff=0)
        page_menu.add_command(label='Main Page', command=page1.tkraise)
        page_menu.add_command(label='RTB Page', command=page2.tkraise)
        page_menu.add_command(label='Finish Page', command=page3.tkraise)
        page_menu.add_command(label='High Scores', command=page4.tkraise)

        page_menu.add_separator()
        page_menu.add_command(label='Exit', command=self.window.parent.destroy)

        self.window.menubar.add_cascade(label='Game Options', menu=game_menu)
        self.window.menubar.add_cascade(label='Pages', menu=page_menu)

    def get_scores(self):
        ''' Method for getting scores '''
        data = self.db.getall(self.db.tables[1])
        print(data)
        return data


if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('600x400+300+300')
    controller = Controller(Database(), Window(root))
    root.mainloop()
I did move the database into a class and that solved the problem.
In your code above I can see a structure style and elegance that does not exist in my code. Planning to use the above as a starting block and build around it while trying to mirror the style and structure.

Many thanks.

Angus


Hi Menator

I was wondering if there was an easy to raise a page from a button on an other page?
Also I don't see where "Main" page is shown as the first page, am I missing something obvious there?

Angus
Reply


Messages In This Thread
Sqlite not updating - by angus1964 - May-24-2023, 04:37 AM
RE: Sqlite not updating - by menator01 - May-24-2023, 06:42 PM
RE: Sqlite not updating - by angus1964 - May-24-2023, 07:04 PM
RE: Sqlite not updating - by angus1964 - May-24-2023, 06:45 PM
RE: Sqlite not updating - by menator01 - May-24-2023, 07:02 PM
RE: Sqlite not updating - by angus1964 - May-24-2023, 07:11 PM
RE: Sqlite not updating - by angus1964 - May-25-2023, 08:47 PM
RE: Sqlite not updating - by angus1964 - May-26-2023, 03:23 PM
RE: Sqlite not updating - by menator01 - May-24-2023, 07:07 PM
RE: Sqlite not updating - by Larz60+ - May-25-2023, 10:16 PM
RE: Sqlite not updating - by angus1964 - May-26-2023, 10:16 AM
RE: Sqlite not updating - by menator01 - May-27-2023, 09:05 PM
RE: Sqlite not updating - by angus1964 - May-28-2023, 10:04 AM
RE: Sqlite not updating - by angus1964 - May-30-2023, 07:36 PM
RE: Sqlite not updating - by angus1964 - May-30-2023, 07:50 PM
RE: Sqlite not updating - by menator01 - May-30-2023, 08:23 PM
RE: Sqlite not updating - by angus1964 - May-31-2023, 05:48 AM
RE: Sqlite not updating - by brighammcdanie - May-30-2023, 08:39 PM
RE: Sqlite not updating - by menator01 - May-31-2023, 06:11 AM
RE: Sqlite not updating - by angus1964 - May-31-2023, 06:37 AM
RE: Sqlite not updating - by angus1964 - Jul-07-2023, 03:18 PM
RE: Sqlite not updating - by deanhystad - Jul-07-2023, 06:26 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Updating records 1 to n on an SQLite table KevinBrown 2 2,721 Mar-30-2019, 05:02 PM
Last Post: KevinBrown

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020