2016-03-30 34 views
0

Python'da yeniyim. Şu anda 4 seçeneğe sahip bir GUI oluşturuyorum. Bir soru ve ilgili 4 seçenek anlamına gelir. Kullanıcı 1 seçim seçecek ve Tamam'a tıklayın, bunun özel bir iletişim göstermek ve ben hata alıyorumwx.Frame sınıfının wx.Dialog sınıfına geçirme değeri python

import wx 

class MyFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, -1, "My Frame", size=(3000, 3000)) 
     panel = wx.Panel(self,-1) 
     #panel.Bind(wx.EVT_MOTION, self.OnMove) 
     wx.StaticText(panel, -1, "What are the values of X", pos=(10, 12)) 
     #self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(100, 10)) 
     self.option1 = wx.CheckBox(panel, -1, "Apples", (20,100), (160,-1)) 
     wx.CheckBox(panel, -1, "Mango", (20,150), (160,-1)) 
     wx.CheckBox(panel, -1, "Banana", (20,200), (160,-1)) 
     wx.CheckBox(panel, -1, "Orange", (20,250), (160,-1)) 
     button=wx.Button(panel,label="OK",pos=(800, 400), size = (50,50)) 
     self.Bind(wx.EVT_BUTTON, self.newwindow, button) 


    # def OnMove(self, event): 
     # pos = event.GetPosition() 
     # self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y)) 


    def newwindow(self, event): 
     dia = MyDialog(None, -1, 'buttons') 
     dia.ShowModal() 
     dia.Destroy() 



class MyDialog(wx.Dialog): 
    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title, size=(350,300) 
     value = MyFrame.self.option1.GetValue() 
     print ("***** Value is" , value) 
app = wx.App(False) 
frame = MyFrame() 
frame.Show(True) 
app.MainLoop() 

cevabın doğru olup olmadığı konusunda bilgi veya olmaz. Nasıl wx.Dialog için uygun ebeveynlik yapmak kullanıcı tarafından seçilir checkbox değerini almak ve iletişim sınıf

+0

Başlamak için birkaç hızlı not: (1) “MyDialog” sınıfınızda 'wx.Dialog .__ init __...' ile başlayan satırda kapanış parantezini kaçırıyorsunuz; (2) 'value = MyFrame.self.option1.GetValue()' iyi değil. Genel değişken olan 'frame' olan örneklenmiş sınıfın değerini almak istersiniz. Frame.option1.GetValue() 'yi deneyin. – dpwilson

cevap

0

İlk aynı döndü değer geçmek: En kısa sürede bunu olarak

def newwindow(self, event): 
    dia = MyDialog(self, -1, 'buttons') # refer to instance of MyFrame parent 

elde edersiniz iletişim ana çerçevesine atıf ve kullanılabilir:

@dpwilson tarafından belirtildiği gibi
class MyDialog(wx.Dialog): 
    def __init__(self, parent, id, title): 
     # ... 
     value = parent.option1.GetValue() # parent is instance of MyFrame 
     print ("***** Value is" , value) 

, bu iyi bir sınıf (MyFrame) sınıf (frame) yerine örneği erişim çalışmaktır.

Ben wx.Dialog için açıkça MyFrame örneğini geçmek daha iyi uygulama ("açık örtük daha iyidir") olduğunu düşünüyorum (e. G. parent kullanarak) yerine küresel değişkeni frame güvenmek çalışıyor. Başka bir modülden MyFrame/MyDialog içe aktarıyorsanız frame mevcut olmayacaktır.

İlgili konular