2014-02-27 2 views
1

나는 완전한 초보자는 아니지만 전문가가 아닙니다 (아마도 나는 위험 할 정도로 충분히 알고 있을까요? :)). 나는 이것을 게시하기 전에 약 2 시간 동안 내 자신의 문제를 해결하고 인터넷 검색을 시도했다. 이것에 대한 설명이있을 수 있습니다. 잘못된 용어를 사용하고있을 수도 있습니다. 바라기를 나는 아래에 충분히 잘 설명했다.wxPython - 상속 된 클래스에 새 객체를 추가 하시겠습니까?

나는 내 응용 프로그램의 GUI 측면을 관리하기 위해 wxFormBuilder를 사용해 왔으며 모든 것이 잘 진행되고 있습니다. 그러나 이제 wxFormBuilder를 사용하여 추가 할 수있는 개체 메뉴에서 제공되지 않는 WebView 개체를 추가해야합니다.

이 문제를 극복하기 위해 상속 된 클래스 파일에 누락 된 개체를 지정하고 Generated 클래스 파일에 정의 된 기존 Sizer에 추가 할 줄을 써야한다고 생각했습니다. 생성 된 코드 파일에 수동으로 추가하는 것을 고려했지만 변경하고 파일을 다시 생성해야한다면 수동으로 작성한 코드가 손실됩니다.

상속 된 클래스에서 새 WebView 개체를 만드는 것은 좋지만 Sizer를 참조하기 위해이를 참조하는 방법을 찾을 수 없습니다. 여기

import wx 
import wx.html2 
import isdPhoneQueueGui #My Generated Class 

class isdPhoneQueueMain(isdPhoneQueueGui.isdPhoneQueue): 
    def __init__(self, parent): 
     isdPhoneQueueGui.isdPhoneQueue.__init__(self,parent) 
     self.myPage = wx.html2.WebView.New(self.myPanel) 
     #STUCK HERE - WHAT SCOPE TO USE: to add "myPage" object to existing Sizer "mySizer"??? 

그리고 내 생성 된 클래스에서

class isdPhoneQueue (wx.Frame):  
    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"ISD Phone Queue", pos = wx.DefaultPosition, size = wx.Size(1024,768), style = wx.CAPTION|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL) 
     mySizer = wx.BoxSizer(wx.VERTICAL) 
     self.myPanel = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.Size(1024,768), wx.TAB_TRAVERSAL) 
     self.myPanel.SetSizer(mySizer) 

난에 mySizer를 참조하는 다양한 방법이있다 (그냥 "mySizer"등의 definiton 표시) 내 상속 클래스에서 발췌 한 것입니다 상속 된 클래스이지만 올바른 참조 방법을 찾지 못했습니다.

mySizer.Add(self.myPage, 1, wx.EXPAND, 10) 

을하지만이 "나가서 설명하자면 NameError : 전역 이름 'mySizer'정의되지 않은"을 제공합니다

나는 처음에 생성 된 클래스로하려고 생각.

isdPhoneQueueGui.mySizer.Add(self.myPage, 1, wx.EXPAND, 10) 
self.isdPhoneQueueGui.mySizer.Add(self.myPage, 1, wx.EXPAND, 10) 
isdPhoneQueue.mySizer.Add(self.myPage, 1, wx.EXPAND, 10) 
self.isdPhoneQueue.mySizer.Add(self.myPage, 1, wx.EXPAND, 10) 

감사합니다 사전에 어떤 도움 :

은 그때 일을 어느 것도 참조하는 접두사의 다양한 조합을 시도했다.

답변

0

isdPhoneQueue.__init__()의 변수 'mySizer'는 로컬 변수이기 때문에 루틴을 실행 한 후에 사용할 수 없습니다. 참조하고있는 sizer에 대한 참조는 패널 self.myPanel에 할당되며, 이것이 남아있는 곳입니다. myPanel가 액세스 할 수있는 상속 된 멤버 변수이기 때문에

그래서 당신은 ...

the_sizer = self.myPanel.GetSizer()

와 상속 클래스 생성자에의 보류를 얻을 수 있습니다.

+1

대단히 감사합니다. 그런 다음 관련 Sizer에 대한 참조를 만드는 대신 Panel 객체 자체에서 Sizer를 참조하고 새 WebView 객체를 sizer에 추가 할 수도 있습니다. self.myPanel.Sizer.Add self.myPage, 1, wx.EXPAND, 10) – mrshr3d

관련 문제