Yaleesa
Yaleesa

Reputation: 23

wxpython frame update with a button click

In progress of making an wxpython assignment for school, I stumbled on something I can't seem to figure out by myself. The main idea of the assignment is to make a self-generating quiz. Now I made a frame were the questions should be in the future. I need this frame to update itself with the button for the next question (middle one), so the next question is showing when clicking the button. Before actually doing that I tried testing it with a random number generator. But the update button doesn't seem to update to a new frame with a new number (looking the same, only the number changing). I know I'm missing something, but I don't know where to start.

Here is my code:

import wx
import random

class welkom(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Aminozuurtoets V.1.0", size=(900,600))
        self.mainFrame = mainFrame

        top_panel = wx.Panel(self)
        w_tekst = wx.StaticText(top_panel, -1, "Welkom bij de aminozuurtoets",(325,50), (100, -1), wx.ALIGN_CENTER)
        w_font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        w_tekst.SetFont(w_font)

        st_nr = wx.StaticText(top_panel, -1, 'Studentnummer' ,(100,150))
        inp_st_nr = wx.TextCtrl(top_panel, -1, '', (300,150), size=(140,-1))
        st_vr= wx.StaticText(top_panel, -1, 'Student voornaam' ,(100,200))
        inp_st_vr = wx.TextCtrl(top_panel, -1, '', (300,200), size=(140,-1))
        st_ach = wx.StaticText(top_panel, -1, 'Student achternaam' ,(100,250))
        inp_st_ach = wx.TextCtrl(top_panel, -1, '', (300,250), size=(140,-1))
        aan_vr = wx.StaticText(top_panel, -1, 'Aantal vragen' ,(100,300))
        inp_aan_vr = wx.TextCtrl(top_panel, -1, '20', (300,300), size=(140,-1))

        close_button = wx.Button(top_panel, label = "Stoppen", pos=(600, 400), size=(150, 200))
        self.Bind(wx.EVT_BUTTON, self.closebutton, close_button)
        go_button = wx.Button(top_panel, label = "Doorgaan", pos=(100, 400), size=(150, 200))
        self.Bind(wx.EVT_BUTTON, self.buttonClick, go_button)

    def closebutton(self, event):
        self.Close(True)

    def buttonClick(self, event):
        self.Hide()
        self.mainFrame(None, id = -1).Show()

class mainFrame(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Aminozuurtoets V.1.0", size=(900,600))

        top_panel = wx.Panel(self)
        self.vraag = 1
        m_tekst = wx.StaticText(top_panel, -1, "Vraag " + str(self.vraag),(400,50), (100, -1), wx.ALIGN_CENTER)
        m_font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        m_tekst.SetFont(m_font)

        cijfer = random.randint(1,100)


        test2 = wx.StaticText(top_panel, -1, str(cijfer), (325,300))

        res_but = wx.Button(top_panel, label = "Resultaten", pos=(650, 400), size=(150, 200))
        ga_naar = wx.Button(top_panel, label = "Ga naar vraag", pos=(100, 400), size=(150, 200))
        ga_button = wx.Button(top_panel, label = "Volgende vraag", pos=(380, 400), size=(150, 200))
        self.Bind(wx.EVT_BUTTON, self.buttonClick1, ga_button)

    def buttonClick1(self, event):
        self.Update()


    def closebutton(self, event):
        self.Close(True)

app = wx.App()
frame = welkom(None, id = -1).Show()
app.MainLoop()

Upvotes: 2

Views: 1845

Answers (1)

falsetru
falsetru

Reputation: 368894

Just calling Update doesn't change nothing. I changed mainFrame class. (See comments that starts with ###)

class mainFrame(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Aminozuurtoets V.1.0", size=(900,600))

        top_panel = wx.Panel(self)
        self.vraag = 1
        m_tekst = wx.StaticText(top_panel, -1, "Vraag " + str(self.vraag),(400,50), (100, -1), wx.ALIGN_CENTER)
        m_font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
        m_tekst.SetFont(m_font)

        cijfer = random.randint(1,100)

        ### Make an attribute to access from buttonClick1 method.
        self.test2 = wx.StaticText(top_panel, -1, str(cijfer), (325,300))

        res_but = wx.Button(top_panel, label = "Resultaten", pos=(650, 400), size=(150, 200))
        ga_naar = wx.Button(top_panel, label = "Ga naar vraag", pos=(100, 400), size=(150, 200))
        ga_button = wx.Button(top_panel, label = "Volgende vraag", pos=(380, 400), size=(150, 200))
        self.Bind(wx.EVT_BUTTON, self.buttonClick1, ga_button)

    def buttonClick1(self, event):
        ### Change label of static text.
        self.test2.Label = str(random.randint(1,100))


    def closebutton(self, event):
        self.Close(True)

Upvotes: 2

Related Questions