2011-08-14 17 views
5

Bir dizüstü bilgisayar sekmesini devre dışı bırakmak için var mı? Widget'ların kendileriyle yapabileceğiniz gibi? Başladığım uzun bir sürecim var ve buna bakanlar için oldukça açıklayıcı olsa da, çalıştığı süreç tamamlanana kadar kullanıcının diğer sekmelerde gezinmesini engellemek istiyorum.wxPython: Bir dizüstü bilgisayar sekmesini devre dışı bırakabilir misiniz?

Bu konuda yardımcı olabilmek için wx.Notebook numaralı telefondan hiçbir şey bulamadık mı?

Kod pasajı: Bu wx.Notebook ile yapılabilir değil si

def __init__(self, parent): 
    wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT) 

    self.AddPage(launchTab.LaunchPanel(self), "Launch") 
    self.AddPage(scanTab.ScanPanel(self), "Scan") 
    self.AddPage(extractTab.ExtractPanel(self), "Extract") 
    self.AddPage(virtualsTab.VirtualsPanel(self), "Virtuals") 

cevap

3

. Ama o kadar wx.lib.agw.aui.AuiNotebook gibi daha gelişmiş widget bazılarını kullanabilirsiniz:

import wx 
import wx.lib.agw.aui as aui 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     style = aui.AUI_NB_DEFAULT_STYLE^aui.AUI_NB_CLOSE_ON_ACTIVE_TAB 
     self.notebook = aui.AuiNotebook(self, agwStyle=style)  

     self.panel1 = wx.Panel(self.notebook) 
     self.panel2 = wx.Panel(self.notebook) 
     self.panel3 = wx.Panel(self.notebook) 

     self.notebook.AddPage(self.panel1, "First") 
     self.notebook.AddPage(self.panel2, "Second") 
     self.notebook.AddPage(self.panel3, "Third") 

     self.notebook.EnableTab(1, False) 

     self.Show() 


app = wx.App(False) 
win = MainWindow(None) 
app.MainLoop() 
+0

Çalışıyor, ancak stilistik olarak benim için başka sorunlar yaratıyor ('aui.AuiNotebook' ve' wx.FlatNotebook'). Sonunda düzenli bir eski wx.Notebook ile yapıştırma. Yine de teşekkürler. – chow

2

Teknik olarak wx.Notebook bir sekme devre dışı bırakmak için bir yol yoktur. Ancak, aynı şeyi hangi sekmenin tıklandığını kontrol ederek ve "devre dışı" ise, EVT_NOTEBOOK_PAGE_CHANGING veya EVT_NOTEBOOK_PAGE_CHANGED etkinliğine veto uygulayabilirsiniz. Alternatif olarak, yukarıda belirtildiği gibi AUI not defterini kullanabilirsiniz. Wx.aui birinden değil, agw lib'den bir tane olduğunu unutmayın. FlatNotebook ayrıca sekmeleri devre dışı bırakma özelliğini de sunar. Örnek için wxPython demosuna bakın.

0
class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     p = wx.Panel(self) 
     self.nb = wx.Notebook(p) 
     ...... 

     self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) 

    def OnPageChanged(self, event): 
     if wx.IsBusy(): 
      self.Unbind(wx.EVT_NOTEBOOK_PAGE_CHANGED) 
      self.nb.SetSelection(event.GetOldSelection()) 
      self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) 

Etkin sekme, Notebook.SetSelection() tarafından ayarlanabilir. Ancak olay sonsuz döngüden kaçınmak için çözülmemeli/devre dışı bırakılmalı ve etrafına bağlanmalı/etkinleştirilmelidir. Panel kodlarında wx.BeginBusyCursor(), wx.EndBusyCursor() olmalıdır. Ardından Uygulama meşgul olduğunda sekme değiştirme "devre dışı" olur.

+0

wx.Listbook ile aynı sorunu yaşadım ve aGuegu cevabını kullandım ama yinelemekten kaçınmak için, SetSelection ve bağlama ve ciltleme yerine, sayfa değiştirme olaylarını oluşturmayan basit bir şekilde kullanılan ChangeSelection. – dhiga

İlgili konular