2013-06-17 4 views
2

학교용 wxpython 할당이 진행되는 동안 나는 혼자 힘으로 파악할 수없는 것을 발견했습니다. 과제의 주요 아이디어는 자기 생성 퀴즈를 만드는 것입니다. 이제는 미래에 있어야 할 질문들이 프레임을 만들었습니다. 다음 질문 (중간) 버튼을 사용하여이 프레임을 업데이트해야하므로 다음 질문이 버튼을 클릭 할 때 표시됩니다. 실제로 이것을하기 전에 난수 생성기로 테스트 해 보았습니다. 그러나 업데이트 버튼은 새 번호로 새 프레임으로 업데이트하는 것처럼 보이지 않습니다 (동일한 모양으로 번호 만 변경됨). 나는 뭔가를 놓친다는 것을 알고 있지만 어디서부터 시작해야할지 모른다.버튼 클릭으로 wxpython 프레임 업데이트

여기 내 코드입니다 :

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() 

답변

2

그냥 아무것도 변경하지 않습니다 Update를 호출. mainFrame 클래스를 변경했습니다. (###로 시작하는 주석 참조)

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)