2009-06-23 6 views
5

मेरे पास एक wx.Frame है, जिसमें एक मुख्य wx है। इसके अंदर कई विजेट्स के साथ पैनल। मैं वहां एक बटन चाहता हूं कि "सहायता पैनल" आने के लिए। यह सहायता पैनल शायद wx.Panel होगा, और मैं इसे पूरे मुख्य wx को ओवरले करना चाहता हूं। पैनेल (Wx.Frame के मेनू बार सहित)। सहायता बटन पर कुछ प्रकार का बंद बटन होना चाहिए जो इसे फिर से गायब कर देगा।wxPython: एक wx.Panel को ओवरले करने का अच्छा तरीका मौजूदा wx.Panel

इसे प्राप्त करने का एक अच्छा तरीका क्या है? मैंने wx.Notebook में देखा है लेकिन इसे टैब दिखाने के लिए कोई रास्ता नहीं मिला है।

ध्यान दें कि जब भी उपयोगकर्ता बंद हो जाता है और इसे खोलता है तो मैं सहायता पैनल को नष्ट और पुन: बनाना नहीं चाहता हूं: मैं बस इसे छिपाना चाहता हूं।

उत्तर

11

ऐसे कई तरीके है

क) आप एक कस्टम बच्चे पैनल बना सकते हैं, और सभी बच्चे विजेट के शीर्ष के बीच 0,0 पर यह एक ही आकार और स्थिति बनाते हैं। नष्ट यह सिर्फ दिखाएँ/यह छुपाएं यह भी माता पिता फ्रेम

ख के साथ आकार बदलता है) की कोई जरूरत नहीं सही स्थान पर एक wx.PopupWindow या व्युत्पन्न वर्ग और जगह है और यह आकार पॉपअप

इतनी के रूप में एक में सुझाव देते हैं) यहाँ एक उदाहरण है, जहां सभी नियंत्रण पैनल में डाल रहे हैं आकार मापक का उपयोग कर, के रूप में अलग-अलग सहायता cntrl जो दिखाया जा सकता है/बटन से छिपा बनाई गई है है, लेकिन आप जो करीब

import wx 

class MyFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 

     self.panel = wx.Panel(self) 

     # create controls 
     self.cntrlPanel = wx.Panel(self.panel) 
     stc1 = wx.StaticText(self.cntrlPanel, label="wow it works") 
     stc2 = wx.StaticText(self.cntrlPanel, label="yes it works") 
     btn = wx.Button(self.cntrlPanel, label="help?") 
     btn.Bind(wx.EVT_BUTTON, self._onShowHelp) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(stc1) 
     sizer.Add(stc2) 
     sizer.Add(btn) 
     self.cntrlPanel.SetSizer(sizer) 


     # create help panel 
     self.helpPanel = wx.Panel(self.panel) 
     self.stcHelp = wx.StaticText(self.helpPanel, label="help help help\n"*8) 
     btn = wx.Button(self.helpPanel, label="close[x]") 
     btn.Bind(wx.EVT_BUTTON, self._onShowCntrls) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.stcHelp) 
     sizer.Add(btn) 
     self.helpPanel.SetSizer(sizer) 
     self.helpPanel.Hide() 
     self.helpPanel.Raise() 
     self.helpPanel.SetBackgroundColour((240,250,240)) 
     self.Bind(wx.EVT_SIZE, self._onSize) 

     self._onShowCntrls(None) 

    def _onShowHelp(self, event): 
     self.helpPanel.SetPosition((0,0)) 
     self.helpPanel.Show() 
     self.cntrlPanel.Hide() 

    def _onShowCntrls(self, event): 
     self.cntrlPanel.SetPosition((0,0)) 
     self.helpPanel.Hide() 
     self.cntrlPanel.Show() 

    def _onSize(self, event): 
     event.Skip() 
     self.helpPanel.SetSize(self.GetClientSizeTuple()) 
     self.cntrlPanel.SetSize(self.GetClientSizeTuple()) 

app = wx.PySimpleApp() 
frame = MyFrame() 
frame.Show() 
app.SetTopWindow(frame) 
app.MainLoop() 
+0

मुझे लगता है कि क्लिक करने पर ही छुपाता है एक कस्टम cntrl बना सकते हैं हो सकता है कि मैंने शब्द "ओवरले" गलत तरीके से इस्तेमाल किया ... मुझे एक डब्ल्यूएक्स चाहिए। पैनेल जो मुख्य Wx को कवर करेगा। पैनेल, इसे पूरी तरह छुपाएं। मैंने wx.Panel को छोड़कर जो किया था, मैंने कोशिश की, लेकिन मैं इसे हमेशा wx.Frame के आकार के अनुसार स्वयं कैसे समायोजित कर सकता हूं? –

+0

प्रारंभ में पैनल = फ्रेम क्लाइंट/या आंतरिक पैनल का आकार सेट करें ऑनसाइज (EVT_SIZE) को ओवरराइड करें और फ़्रेम –

+0

के आकार के अनुसार सहायता का आकार बदलें ठीक है, मैंने उदाहरण अपडेट किया है, इसलिए अब दो पैनल एक cntrl के लिए हैं और एक मदद के लिए है, दोनों आंतरिक रूप से साइज़र का उपयोग करके सीएनआरटीएल की व्यवस्था कर सकते हैं, और दोनों के पास अन्य पैनल में स्विच करने के लिए बटन है, वे मूल फ्रेम के साथ आकार बदलते हैं, इसका मतलब है कि आपको इसकी आवश्यकता है। लेकिन जैसा कि मैंने कहा कि ऐसा करने के कई तरीके हैं। –

संबंधित मुद्दे