Module za_warudo.gui.show_event_page

Expand source code
from functools import partial
from datetime import datetime
from datetime import timedelta
from tkinter import *
from tkinter import ttk
import logging as log

class ShowEventPage(ttk.Frame):
    '''
    Page showing details about and event
    '''

    def __init__(self, parent, controller):
        ttk.Frame.__init__(self, parent)
        self.controller = controller
        self.event = None
        self.projection_room = None

        pricelist_frame = ttk.Frame(self)
        members_frame = ttk.Frame(self)

        # Default padding for the widgets
        pad = 10
        mut_labels = ('name', 'projection_type', 'location',
                      'date', 'seats_left', 'sold_seats',
                      'booked_seats', 'responsible')

        label = dict()
        self.textvar = dict()
        value = dict()

        for var in mut_labels:
            label[var] = ttk.Label(self, text=var.capitalize().replace('_', ' '))
            self.textvar[var] = StringVar()
            value[var] = ttk.Label(self, textvariable=self.textvar[var])

        # Buttons
        back_button = ttk.Button(self, text="Back", command=self.back)
        timetable_button = ttk.Button(self, text="Timetable", command=self.timetable)

        # Treeviews
        label['members'] = ttk.Label(self, text="Members")
        members_scrollbar = ttk.Scrollbar(members_frame, orient=VERTICAL)
        self.members_tree = ttk.Treeview(members_frame, selectmode='browse', yscrollcommand=members_scrollbar.set)
        self.members_tree.heading("#0", text="Name")
        self.members_tree.tag_configure('odd', background="#F0F0F0")
        self.members_tree.tag_configure('even', background="#FAFAFA")
        members_scrollbar.configure(command=self.members_tree.yview)
        self.members_tree.pack(side=LEFT)
        members_scrollbar.pack()

        label['pricelist'] = ttk.Label(self, text="Price list")
        pricelist_scrollbar = ttk.Scrollbar(pricelist_frame, orient=VERTICAL)
        self.pricelist_tree = ttk.Treeview(pricelist_frame, columns=("#1"), yscrollcommand=members_scrollbar.set)
        self.pricelist_tree.heading("#0", text="Title")
        self.pricelist_tree.heading("#1", text="Price")
        self.pricelist_tree.column("#1", width=50)
        self.pricelist_tree.tag_configure('odd', background="#F0F0F0")
        self.pricelist_tree.tag_configure('even', background="#FAFAFA")
        pricelist_scrollbar.configure(command=self.pricelist_tree.yview)
        self.pricelist_tree.pack(side=LEFT)
        pricelist_scrollbar.pack()

        # Grid
        back_button.grid(row=0, column=6, padx=pad, pady=pad)

        label['name'].grid(row=1, column=0, padx=pad, pady=pad, sticky=W)
        value['name'].grid(row=1, column=1, padx=pad, pady=pad, sticky=E)
        label['seats_left'].grid(row=1, column=2, padx=pad, pady=pad, sticky=W)
        value['seats_left'].grid(row=1, column=3, padx=pad, pady=pad, sticky=W)
        label['members'].grid(row=1, column=4, padx=pad, pady=pad, sticky=W)
        label['pricelist'].grid(row=1, column=5, padx=pad, pady=pad, sticky=W)

        label['projection_type'].grid(row=2, column=0, padx=pad, pady=pad, sticky=W)
        value['projection_type'].grid(row=2, column=1, padx=pad, pady=pad, sticky=E)
        label['sold_seats'].grid(row=2, column=2, padx=pad, pady=pad, sticky=W)
        value['sold_seats'].grid(row=2, column=3, padx=pad, pady=pad, sticky=W)
        members_frame.grid(row=2, column=4, rowspan=9, padx=pad, pady=pad, sticky=NSEW)
        pricelist_frame.grid(row=2, column=5, rowspan=9, padx=pad, pady=pad, sticky=NSEW)

        label['location'].grid(row=3, column=0, padx=pad, pady=pad, sticky=W)
        value['location'].grid(row=3, column=1, padx=pad, pady=pad, sticky=E)
        label['booked_seats'].grid(row=3, column=2, padx=pad, pady=pad, sticky=W)
        value['booked_seats'].grid(row=3, column=3, padx=pad, pady=pad, sticky=W)

        label['date'].grid(row=4, column=0, padx=pad, pady=pad, sticky=W)
        value['date'].grid(row=4, column=1, padx=pad, pady=pad, sticky=E)
        label['responsible'].grid(row=4, column=2, padx=pad, pady=pad, sticky=W)
        value['responsible'].grid(row=4, column=3, padx=pad, pady=pad, sticky=W)

    def display_events_information(self):
        # day-month-year begin_hour - end_hour
        date = self.event.begin.strftime("%d-%m-%Y %H")
        date += 'h - '
        date += (self.event.begin + timedelta(minutes=self.event.running_time)).strftime("%H")
        date += 'h'
        seats_left = str(self.projection_room.total_seats - self.event.booked_seats - self.event.sold_seats)
        seats_left += ' / ' + str(self.projection_room.total_seats)
        revenue = str(self.event.revenue) + ' €'
        self.textvar['name'].set(self.event.name)
        self.textvar['projection_type'].set(self.event.projection_type)
        self.textvar['location'].set(self.projection_room.location)
        self.textvar['date'].set(date)
        self.textvar['seats_left'].set(seats_left)
        self.textvar['sold_seats'].set(self.event.sold_seats)
        self.textvar['booked_seats'].set(self.event.booked_seats)
        self.textvar['responsible'].set(self.responsible.name)
        self.display_members()
        self.display_pricelist()
        #print(self.members)


    def timetable(self):
        pass

    def back(self):
        self.controller.show_frame('EventsPage')

    def display_pricelist(self):
        self.pricelist_tree.delete(*self.pricelist_tree.get_children())

        print(self.categories)
        for i, price in enumerate(self.categories):
            value = str(price.category.price) + ' €'
            self.pricelist_tree.insert('', 'end', text=price.category.title, values=(value,), tags=('even' if i % 2 else 'odd',))


    def display_members(self):
        self.members_tree.delete(*self.members_tree.get_children())

        #print('Members')
        #print(len(self.members))
        for i, team in enumerate(self.members):
            #log.info('iid : %d, member : %s' % (i, team.member.name))
            self.members_tree.insert('', 'end', iid=str(i), text=team.member.name, tags=('even' if i % 2 else 'odd',))

    def display_event_information(self):
        pass

    def set_event(self, event):
        self.event = event

    def set_projection_room(self, projection_room):
        self.projection_room = projection_room

    def set_categories(self, categories):
        self.categories = categories

    def set_responsible(self, responsible):
        self.responsible = responsible

    def set_members(self, members):
        self.members = members

Classes

class ShowEventPage (parent, controller)

Page showing details about and event

Construct a Ttk Frame with parent master.

STANDARD OPTIONS

class, cursor, style, takefocus

WIDGET-SPECIFIC OPTIONS

borderwidth, relief, padding, width, height
Expand source code
class ShowEventPage(ttk.Frame):
    '''
    Page showing details about and event
    '''

    def __init__(self, parent, controller):
        ttk.Frame.__init__(self, parent)
        self.controller = controller
        self.event = None
        self.projection_room = None

        pricelist_frame = ttk.Frame(self)
        members_frame = ttk.Frame(self)

        # Default padding for the widgets
        pad = 10
        mut_labels = ('name', 'projection_type', 'location',
                      'date', 'seats_left', 'sold_seats',
                      'booked_seats', 'responsible')

        label = dict()
        self.textvar = dict()
        value = dict()

        for var in mut_labels:
            label[var] = ttk.Label(self, text=var.capitalize().replace('_', ' '))
            self.textvar[var] = StringVar()
            value[var] = ttk.Label(self, textvariable=self.textvar[var])

        # Buttons
        back_button = ttk.Button(self, text="Back", command=self.back)
        timetable_button = ttk.Button(self, text="Timetable", command=self.timetable)

        # Treeviews
        label['members'] = ttk.Label(self, text="Members")
        members_scrollbar = ttk.Scrollbar(members_frame, orient=VERTICAL)
        self.members_tree = ttk.Treeview(members_frame, selectmode='browse', yscrollcommand=members_scrollbar.set)
        self.members_tree.heading("#0", text="Name")
        self.members_tree.tag_configure('odd', background="#F0F0F0")
        self.members_tree.tag_configure('even', background="#FAFAFA")
        members_scrollbar.configure(command=self.members_tree.yview)
        self.members_tree.pack(side=LEFT)
        members_scrollbar.pack()

        label['pricelist'] = ttk.Label(self, text="Price list")
        pricelist_scrollbar = ttk.Scrollbar(pricelist_frame, orient=VERTICAL)
        self.pricelist_tree = ttk.Treeview(pricelist_frame, columns=("#1"), yscrollcommand=members_scrollbar.set)
        self.pricelist_tree.heading("#0", text="Title")
        self.pricelist_tree.heading("#1", text="Price")
        self.pricelist_tree.column("#1", width=50)
        self.pricelist_tree.tag_configure('odd', background="#F0F0F0")
        self.pricelist_tree.tag_configure('even', background="#FAFAFA")
        pricelist_scrollbar.configure(command=self.pricelist_tree.yview)
        self.pricelist_tree.pack(side=LEFT)
        pricelist_scrollbar.pack()

        # Grid
        back_button.grid(row=0, column=6, padx=pad, pady=pad)

        label['name'].grid(row=1, column=0, padx=pad, pady=pad, sticky=W)
        value['name'].grid(row=1, column=1, padx=pad, pady=pad, sticky=E)
        label['seats_left'].grid(row=1, column=2, padx=pad, pady=pad, sticky=W)
        value['seats_left'].grid(row=1, column=3, padx=pad, pady=pad, sticky=W)
        label['members'].grid(row=1, column=4, padx=pad, pady=pad, sticky=W)
        label['pricelist'].grid(row=1, column=5, padx=pad, pady=pad, sticky=W)

        label['projection_type'].grid(row=2, column=0, padx=pad, pady=pad, sticky=W)
        value['projection_type'].grid(row=2, column=1, padx=pad, pady=pad, sticky=E)
        label['sold_seats'].grid(row=2, column=2, padx=pad, pady=pad, sticky=W)
        value['sold_seats'].grid(row=2, column=3, padx=pad, pady=pad, sticky=W)
        members_frame.grid(row=2, column=4, rowspan=9, padx=pad, pady=pad, sticky=NSEW)
        pricelist_frame.grid(row=2, column=5, rowspan=9, padx=pad, pady=pad, sticky=NSEW)

        label['location'].grid(row=3, column=0, padx=pad, pady=pad, sticky=W)
        value['location'].grid(row=3, column=1, padx=pad, pady=pad, sticky=E)
        label['booked_seats'].grid(row=3, column=2, padx=pad, pady=pad, sticky=W)
        value['booked_seats'].grid(row=3, column=3, padx=pad, pady=pad, sticky=W)

        label['date'].grid(row=4, column=0, padx=pad, pady=pad, sticky=W)
        value['date'].grid(row=4, column=1, padx=pad, pady=pad, sticky=E)
        label['responsible'].grid(row=4, column=2, padx=pad, pady=pad, sticky=W)
        value['responsible'].grid(row=4, column=3, padx=pad, pady=pad, sticky=W)

    def display_events_information(self):
        # day-month-year begin_hour - end_hour
        date = self.event.begin.strftime("%d-%m-%Y %H")
        date += 'h - '
        date += (self.event.begin + timedelta(minutes=self.event.running_time)).strftime("%H")
        date += 'h'
        seats_left = str(self.projection_room.total_seats - self.event.booked_seats - self.event.sold_seats)
        seats_left += ' / ' + str(self.projection_room.total_seats)
        revenue = str(self.event.revenue) + ' €'
        self.textvar['name'].set(self.event.name)
        self.textvar['projection_type'].set(self.event.projection_type)
        self.textvar['location'].set(self.projection_room.location)
        self.textvar['date'].set(date)
        self.textvar['seats_left'].set(seats_left)
        self.textvar['sold_seats'].set(self.event.sold_seats)
        self.textvar['booked_seats'].set(self.event.booked_seats)
        self.textvar['responsible'].set(self.responsible.name)
        self.display_members()
        self.display_pricelist()
        #print(self.members)


    def timetable(self):
        pass

    def back(self):
        self.controller.show_frame('EventsPage')

    def display_pricelist(self):
        self.pricelist_tree.delete(*self.pricelist_tree.get_children())

        print(self.categories)
        for i, price in enumerate(self.categories):
            value = str(price.category.price) + ' €'
            self.pricelist_tree.insert('', 'end', text=price.category.title, values=(value,), tags=('even' if i % 2 else 'odd',))


    def display_members(self):
        self.members_tree.delete(*self.members_tree.get_children())

        #print('Members')
        #print(len(self.members))
        for i, team in enumerate(self.members):
            #log.info('iid : %d, member : %s' % (i, team.member.name))
            self.members_tree.insert('', 'end', iid=str(i), text=team.member.name, tags=('even' if i % 2 else 'odd',))

    def display_event_information(self):
        pass

    def set_event(self, event):
        self.event = event

    def set_projection_room(self, projection_room):
        self.projection_room = projection_room

    def set_categories(self, categories):
        self.categories = categories

    def set_responsible(self, responsible):
        self.responsible = responsible

    def set_members(self, members):
        self.members = members

Ancestors

  • tkinter.ttk.Frame
  • tkinter.ttk.Widget
  • tkinter.Widget
  • tkinter.BaseWidget
  • tkinter.Misc
  • tkinter.Pack
  • tkinter.Place
  • tkinter.Grid

Methods

def back(self)
Expand source code
def back(self):
    self.controller.show_frame('EventsPage')
def display_event_information(self)
Expand source code
def display_event_information(self):
    pass
def display_events_information(self)
Expand source code
def display_events_information(self):
    # day-month-year begin_hour - end_hour
    date = self.event.begin.strftime("%d-%m-%Y %H")
    date += 'h - '
    date += (self.event.begin + timedelta(minutes=self.event.running_time)).strftime("%H")
    date += 'h'
    seats_left = str(self.projection_room.total_seats - self.event.booked_seats - self.event.sold_seats)
    seats_left += ' / ' + str(self.projection_room.total_seats)
    revenue = str(self.event.revenue) + ' €'
    self.textvar['name'].set(self.event.name)
    self.textvar['projection_type'].set(self.event.projection_type)
    self.textvar['location'].set(self.projection_room.location)
    self.textvar['date'].set(date)
    self.textvar['seats_left'].set(seats_left)
    self.textvar['sold_seats'].set(self.event.sold_seats)
    self.textvar['booked_seats'].set(self.event.booked_seats)
    self.textvar['responsible'].set(self.responsible.name)
    self.display_members()
    self.display_pricelist()
def display_members(self)
Expand source code
def display_members(self):
    self.members_tree.delete(*self.members_tree.get_children())

    #print('Members')
    #print(len(self.members))
    for i, team in enumerate(self.members):
        #log.info('iid : %d, member : %s' % (i, team.member.name))
        self.members_tree.insert('', 'end', iid=str(i), text=team.member.name, tags=('even' if i % 2 else 'odd',))
def display_pricelist(self)
Expand source code
def display_pricelist(self):
    self.pricelist_tree.delete(*self.pricelist_tree.get_children())

    print(self.categories)
    for i, price in enumerate(self.categories):
        value = str(price.category.price) + ' €'
        self.pricelist_tree.insert('', 'end', text=price.category.title, values=(value,), tags=('even' if i % 2 else 'odd',))
def set_categories(self, categories)
Expand source code
def set_categories(self, categories):
    self.categories = categories
def set_event(self, event)
Expand source code
def set_event(self, event):
    self.event = event
def set_members(self, members)
Expand source code
def set_members(self, members):
    self.members = members
def set_projection_room(self, projection_room)
Expand source code
def set_projection_room(self, projection_room):
    self.projection_room = projection_room
def set_responsible(self, responsible)
Expand source code
def set_responsible(self, responsible):
    self.responsible = responsible
def timetable(self)
Expand source code
def timetable(self):
    pass