1
代碼我的工作:wxPython的 - 如何通過其他類存取權限類實例
class MyApp(wx.App):
def OnInit(self):
frame = MainWindow(None, -1, 'MyApp')
frame.SetIcon(wx.Icon('tutorial.ico', wx.BITMAP_TYPE_ICO))
frame.Center()
frame.Show(True)
return True
class MainWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(620, 480))
menubar = wx.MenuBar()
file = wx.Menu()
edit = wx.Menu()
help = wx.Menu()
file.Append(101, '&New\tCtrl+N')
file.AppendSeparator()
file.Append(102, '&Open\tCtrl+O')
file.Append(103, '&Save\tCtrl+S')
file.Append(104, '&Save As...')
file.AppendSeparator()
file.Append(105, '&Settings')
file.Append(106, '&Quit\tCtrl+Q')
self.model = wx.MenuItem(edit, 201, '&Model', 'Model Mode', kind = wx.ITEM_CHECK)
self.box = wx.BoxSizer(wx.VERTICAL)
self.c = CubeCanvas(self)
self.c.SetMinSize((200, 200))
self.box.Add(self.c, 0, wx.EXPAND |wx.ALL , 15)
class MyCanvasBase(glcanvas.GLCanvas):
def __init__(self, parent):
glcanvas.GLCanvas.__init__(self, parent, -1)
self.init = False
self.context = glcanvas.GLContext(self)
self.lastx = self.x = 30
self.lasty = self.y = 30
self.size = None
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_MOTION, self.OnMouseMotion)
def OnMouseMotion(self, evt):
if frame.model.IsChecked(): #NameError: name 'frame' is not defined
self.lastx, self.lasty = self.x, self.y
self.x, self.y = evt.GetPosition()
self.Refresh(False)
class CubeCanvas(MyCanvasBase):
def InitGL(self):
# set viewing projection
glMatrixMode(GL_PROJECTION)
glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)
# position viewer
glMatrixMode(GL_MODELVIEW)
glTranslatef(0.0, 0.0, -2.0)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_LINE_SMOOTH)
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glEnable(GL_POLYGON_SMOOTH)
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
def OnDraw(self):
# clear color and depth buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
w, h = self.size
w = max(w, 1.0)
h = max(h, 1.0)
dx = self.x/(w/2) - 1.0
dy = self.y/(h/2) - 1.0
glLineWidth(2.5)
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_LINES)
glVertex2f(0, 0)
glVertex2f(dx, -dy)
glEnd()
self.SwapBuffers()
statica = MyApp(0)
statica.MainLoop()
如何從另一個類的方法訪問MainWindow
的model
變量,像MyCanvasBase.onMouseMotion
? wxPython
可以嗎?
我試過了:frame.model
,MainWindow.model
,沒有成功。
如何解決這樣的問題,如wxPython
中類之間的通信?在C++中,我有main
函數,在python中所有的邏輯都是在__init__
或方法中。
[Python中的對象之間的通訊]的可能的複製(https://stackoverflow.com/questions/15998799/communicating-之間的對象功能於蟒) –