2012-03-05 2 views
0

У меня здесь ситуация.Кнопка, указывающая на другую функцию после скрыть одну панель и показать другую

Мой мотив: Скрытие одной панели и отображение другой.

Что работает: Макет мудрый, мое приложение ведет себя, как я этого хочу.

Проблема: После того, как я скрою одну панель и покажу другую, кнопка на этой панели (кнопка процесса) все еще указывает на функцию, связанную с кнопкой «OUT».

шаги, чтобы следовать:

  1. Запустить программу.
  2. Нажмите кнопку «Процесс». Затем нажмите кнопку «Выход».
  3. U увидит, что старая панель вернется. Снова нажмите кнопку «Процесс».
  4. Обратите внимание, что кнопка запускает функцию, связанную с кнопкой «OUT».

Вот полная программа:

import wx 


class Panels(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title,size=(500,-1)) 

       #Font 
     #__init__(self, pointSize, family, style, weight, underline=False, face=EmptyString, encoding=FONTENCODING_DEFAULT) 
     self.font1 = wx.Font(12, wx.DECORATIVE, wx.ITALIC,wx.FONTWEIGHT_BOLD, underline = True) 
     self.font2 = wx.Font(10, wx.DECORATIVE, wx.NORMAL,wx.FONTWEIGHT_BOLD, underline = False) 
     self.font3 = wx.Font(10, wx.DECORATIVE, wx.ITALIC,wx.FONTWEIGHT_BOLD, underline = True) 

     favicon = wx.Icon('icon.ico', wx.BITMAP_TYPE_ICO) 
     wx.Frame.SetIcon(self, favicon) 

     list_choice = ['ALL','UnSeen','DRAFT'] 

     self.vbox = wx.BoxSizer(wx.VERTICAL) 

#Launch panel Defined 

     panel_launch = wx.Panel(self,-1,style=wx.SUNKEN_BORDER) 



#Layout Defination 

     hbox= wx.BoxSizer(wx.HORIZONTAL) 
     lbl_Username = wx.StaticText(panel_launch,0, "Username:") 
     lbl_Username.SetFont(self.font3) 
     self.txt_Username = wx.TextCtrl(panel_launch,0)#wx.Size(self,w,h) 
     lbl_Password = wx.StaticText(panel_launch,0, "Password:") 
     lbl_Password.SetFont(self.font3) 
     self.txt_Password = wx.TextCtrl(panel_launch,0,style=wx.TE_PASSWORD) 

     btn_Process = wx.Button(panel_launch,0, "Process") 

     hbox.Add(lbl_Username,0,wx.LEFT|wx.TOP,10) 
     hbox.Add(self.txt_Username,0,wx.LEFT|wx.TOP,10) 
     hbox.Add(lbl_Password,0,wx.LEFT|wx.TOP,10) 
     hbox.Add(self.txt_Password,0,wx.LEFT|wx.TOP,10) 
     hbox.Add(btn_Process,0,wx.LEFT|wx.TOP,10) 
     panel_launch.SetSizer(hbox) 


#Menu section 
     menubar=wx.MenuBar() 
     pehla=wx.Menu() 
     doosra=wx.Menu() 
     teesra =wx.Menu() 
     option_menu=wx.Menu() 
     info=wx.Menu() 

#Menu Items 

     self.item1_1=pehla.Append(wx.ID_OPEN,"&Add Mail\tAlt-A","This is to add a mail account") #Sub-Items of First menu pull down list 
     item1_2=pehla.Append(wx.ID_EXIT,"&Quit\tAlt-Q","This will exit app") #The last comment will show on status bar when mouse is on that option 
     item3_2=teesra.Append(wx.ID_ABOUT,"A&bout\tAlt-B","About Section") 


     menu_1=menubar.Append(pehla,'&File') #Naming of Menu items 
     menu_2=menubar.Append(doosra,'&Edit') 
     menu_3=menubar.Append(teesra,'&Info') 
     item2_1=option_menu.Append(wx.ID_ANY,'Export File Location') 
     doosra.AppendMenu(wx.ID_ANY,"&Options\tAlt-O",option_menu) 
     self.item1_1.Enable(False) 
     self.SetMenuBar(menubar) 

     self.vbox.Add(panel_launch,-1,wx.EXPAND,10) 

     self.SetSizer(self.vbox) 

     self.Layout() 

     self.Centre() 

     self.Show(True) 

#Event Bindings 

     self.Bind(wx.EVT_BUTTON,self.OnSignIn,btn_Process) 
     self.Bind(wx.EVT_MENU,self.OnAddMail,self.item1_1) 
     self.Bind(wx.EVT_MENU, self.OnFileExit,item1_2) 



#+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()- 
#--------------------------Frame Related Function Zone-------------------------------------- 

    def OnSignIn(self,event): 
     print "We are in default" 

     mymail = self.txt_Username.GetValue() 
     mypwd = self.txt_Password.GetValue() 
     self.tstremove(event) #Hiding the old panel items 
     panel_signedin = wx.Panel(self,-1) 
     lbl_email = wx.StaticText(panel_signedin,0, "Email:") 
     lbl_email.SetFont(self.font3) 
     txt_mymail = wx.StaticText(panel_signedin,0,mymail) 
     txt_mymail.SetFont(self.font2) 
     btn_OUT = wx.Button(panel_signedin,0, "OUT") 
     self.Bind(wx.EVT_BUTTON,self.OnSignOut,btn_OUT) 
     hbox3= wx.BoxSizer(wx.HORIZONTAL) 

     hbox3.Add(lbl_email,0,wx.ALL,10) 
     hbox3.Add(txt_mymail,0,wx.ALL,10) 
     hbox3.Add(btn_OUT,0,wx.ALL,10) 
     panel_signedin.SetSizer(hbox3) 
     self.vbox.Add(panel_signedin,-1,wx.EXPAND,10) 
     self.SetSizer(self.vbox) 
     self.Layout() 
     self.item1_1.Enable(True) #Enable 'Add' menu item 

    def OnSignOut(self,event): 

     print "We are out" 
     event.GetEventObject().GetParent().Hide() 

     self.txt_Username.GetParent().Show(True) 
     self.Layout() 
     return 


    def OnSignInNew(self,event): 

     print "We are in New" 

     self.item1_1.Enable(True) 
     mymail1 = self.txt1_Username.GetValue() 
     mypwd1 = self.txt_Password.GetValue() 
     self.tstremove(event) 
     panel_signedin1 = wx.Panel(self,-1) 
     lbl_email1 = wx.StaticText(panel_signedin1,0, "Email:") 
     lbl_email1.SetFont(self.font3) 
     txt_mymail1 = wx.StaticText(panel_signedin1,0,mymail1) 
     txt_mymail1.SetFont(self.font2) 
     btn1_OUT = wx.Button(panel_signedin1,0, "OUT") 
     self.Bind(wx.EVT_BUTTON,self.OnSignOut,btn1_OUT) 

     hbox31= wx.BoxSizer(wx.HORIZONTAL) 
     hbox31.Add(lbl_email1,0,wx.ALL,10) 
     hbox31.Add(txt_mymail1,0,wx.ALL,10) 
     hbox31.Add(btn1_OUT,0,wx.ALL,10) 
     panel_signedin1.SetSizer(hbox31) 
     self.vbox.Add(panel_signedin1,-1,wx.EXPAND,10) 
     self.SetSizer(self.vbox) 
     self.Layout() 


    def tstremove(self,event): 

     event.GetEventObject().GetParent().Hide() 
     self.Layout() 
     return 

    def tstrecall(self,event): 
     event.GetEventObject().GetParent().UnHide() 
     self.Layout() 
     return 


    def OnAddMail(self,eventdef): 
     self.item1_1.Enable(False) 
     self.vbox.Add((-1,5))   
     panel_new = wx.Panel(self,0,style=wx.SUNKEN_BORDER) 
     hbox1= wx.BoxSizer(wx.HORIZONTAL) 
     lbl1_Username = wx.StaticText(panel_new,-1, "Username:") 
     lbl1_Username.SetFont(self.font3) 
     self.txt1_Username = wx.TextCtrl(panel_new,-1)#wx.Size(self,w,h) 
     lbl1_Password = wx.StaticText(panel_new,-1, "Password:") 
     lbl1_Password.SetFont(self.font3) 
     self.txt1_Password = wx.TextCtrl(panel_new,-1,style=wx.TE_PASSWORD) 

     btn1_Process = wx.Button(panel_new,-1, "Process") 
     self.Bind(wx.EVT_BUTTON,self.OnSignInNew,btn1_Process) 

     hbox1.Add(lbl1_Username,0,wx.LEFT|wx.TOP,10) 
     hbox1.Add(self.txt1_Username,0,wx.LEFT|wx.TOP,10) 
     hbox1.Add(lbl1_Password,0,wx.LEFT|wx.TOP,10) 
     hbox1.Add(self.txt1_Password,0,wx.LEFT|wx.TOP,10) 
     hbox1.Add(btn1_Process,0,wx.LEFT|wx.TOP,10) 
     panel_new.SetSizer(hbox1) 

     self.vbox.Add(panel_new,-1,wx.EXPAND,10) 
     self.SetSizer(self.vbox) 
     self.Layout() 
     self.Bind(wx.EVT_BUTTON,self.OnSignInNew,btn1_Process) 
     return 

#+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()-+-()- 
#--------------------------Process Related Function Zone-------------------------------------- 

    def OnFileExit(self, event): 
     """ File|Exit event """ 
     self.Close() 




app = wx.App() 
Panels(None, -1, 'Test') 
app.MainLoop() 

Я просто не могу, как одна кнопка указывает на другую функцию? Скрывается и показывается недостаточно?

ответ

2

Проблема в том, что вы даете кнопкам BOT одинаковый идентификатор. Фактически, вы даете почти всем своим виджетам одинаковый идентификатор. Вы НИКОГДА не должны этого делать. Если вы измените параметр id во всех виджетах на wx.ID_ANY или на -1, вы получите случайные идентификаторы и ваша программа будет работать.

+0

Ох ..... Спасибо, сэр за руководство ... Попробуем сегодня ... Нужно внести много изменений в программу ........ Надеюсь, работа ..... –

+0

Yahoooooooooooooo ............. Это сработало ........ Мне жаль, что я не смог остановить себя от попыток сейчас сам ........ . Я дал всем идентификаторам некоторые уникальные числа ..... И это сработало, как магия .... Большое спасибо Sir ..... –

+0

Просто FYI: Согласно «wxPython in Action», вы обычно не хотите сами назначать статические идентификаторы. Вот почему я рекомендовал «-1» или wx.ID_ANY –

Смежные вопросы