wxPyton kullanarak bir MVC uygulaması yapıyorum ve wx.lib.pubsub.Publisher ile ilgili bir sorun yaşıyorum.python - wx.lib.pubsub.Publisher düğmelerden arandığında çalışmıyor mu?
Denetleyicimi, Görünümüm'den mümkün olduğunca ayrı tutmak istiyorum. Örneğin, denetleyicimin görünümde kullanılan düğmelerin adlarını "bilmesini" istemiyorum. wxPython example'da, denetleyici onları tanımak zorundadır, bu yüzden bunlara eylemleri bağlayabilir.
from wx.lib.pubsub import Publisher as pub
class Controller:
...
pub.subscribe(self.AddMoney, "MONEY ADDED")
pub.subscribe(self.RemoveMoney, "MONEY REMOVED")
görünümü sadece mesaj göndermek istiyorum bir eyleme kontrolleri bağlamak istiyorum:
class Controller:
...
self.view2.add.Bind(wx.EVT_BUTTON, self.AddMoney)
self.view2.remove.Bind(wx.EVT_BUTTON, self.RemoveMoney)
yerine
wx.lib.pubsub.Publisher
mesajlarını kullanarak, biraz daha 'nükleer ayırma' şeyleri düşündü.
Fakat alas, işe yaramıyor gibi görünüyor. Görünüm, olayları göndermeyi reddeder veya denetleyici, görünümden mesaj almayı reddeder. Emin değilim.
İşte
import wxversion
wxversion.ensureMinimal('2.8')
import wx
from wx.lib.pubsub import Publisher as pub
class View(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Main View")
self.button = wx.Button(self, -1, "foo?")
self.button.Bind(wx.EVT_BUTTON, self.ChangeFoo)
def ChangeFoo(self, evt):
print('Binding works')
pub.sendMessage("FOO CHANGED")
class Controller:
def __init__(self, app):
self.view = View()
pub.subscribe(self.FooChanged, "FOO CHANGED")
self.view.Show()
def FooChanged(self, message):
print('Messaging works')
app = wx.App(False)
Controller(app)
app.MainLoop()
uygulaması büyük bir düğme içeren bir pencere gösterir (Python 2.6.6 ve wxPython 2.8 ile test ettik) sorunumu gösteren küçük bir örnek uygulamadır.
Binding works
Messaging works
Ama bunun yerine alıyorum: bastıktan sonra beklenen çıkışı
Binding works
herkes bu çözmek için biliyor mu?
Güzel lekelenme! WxPython örneğini güncelledim, böylece aynı tuzağa düşmeyen başka kimse yok. Tüm tarihleriniz mutlu ve tüm yollarınız düz ve dürüst olsun. – kikito