2013-08-12 4 views
7

मैं wxPython और VTK के साथ एक अनुप्रयोग बना रहा हूं। स्क्रीन के बाईं ओर एक कॉन्फ़िगरेशन पैनल (Wx.Panel) और दाईं ओर एक VTK विंडो है, जो wx.Panel पर आधारित है। पैनलों को WxFrame के बॉक्ससाइज़र में रखा गया है और WxFormBuilder एप्लिकेशन में परिभाषित आनुपातिक आकार का उपयोग करके आकार दिया गया है, जिसका उपयोग तब एक्सआरसी फ़ाइल उत्पन्न करने के लिए किया जाता है।वीटीके खिड़की wx भर नहीं रहा। पैनेल

enter image description here

मैं कुछ विंडोज 7 मशीनों लगातार सही ढंग से खिड़की के VTK भाग आकार नहीं के साथ एक बहुत ही विशेष समस्या हो रही है - ऊपर दिए गए स्क्रीनशॉट में VTK खिड़की के आसपास सफेद सीमा देखें। मैं इस वीटीके विंडो को एक निश्चित 1280x720 बनाने का प्रयास कर रहा हूं - और यह है - लेकिन कुछ तत्वों के साथ एक आकार का मुद्दा है जो खिड़की के नीचे और दाईं ओर चिपक रहा है। उबंटू 10.04, एक्सपी, या कुछ विंडोज 7 के निर्माण के दौरान यह बग मौजूद नहीं है (मुझे यकीन नहीं है कि काम करने वाले लोगों के बारे में क्या अद्वितीय है और जो अभी तक नहीं हैं)।

इस बग का अनुभव करते समय, मैं स्क्रीन के सफेद हिस्सों से बातचीत कर सकता हूं - वीटीके इंटरैक्टर के माध्यम से क्लिक सही ढंग से संभाले जाते हैं, इसलिए यह अभी भी मेरे वीटीके दृश्य का हिस्सा है।

एप्लिकेशन सेटअप नीचे जैसा है, जहां दाएं हाथ के वीटीके फलक graphics_panel है। पैनल wxEXPAND और कोई अन्य झंडे के साथ सेट है, और मेरे ऐप के सभी तत्व स्वचालित रूप से आकार में सेट हैं (कोई न्यूनतम, अधिकतम या डिफ़ॉल्ट आकार सेट)। इसका एकमात्र अपवाद bSizer1 (मुख्य WxFrame साइज़र) है जिसमें न्यूनतम चौड़ाई और ऊंचाई सेट है (मुझे यकीन नहीं है कि यह जाने का सही तरीका है, लेकिन ऐसा लगता है कि ठीक है)।

panel setup

मैं wxFormBuilder से एक्सआरसी पैदा करते हैं और उसके बाद अपने आवेदन, जहाँ मेरे VTK दृश्य के रूप में नीचे की स्थापना की है में इस का उपयोग करें:

class MyScene(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, style=wx.NO_BORDER) 
     #'parent' is main_frame (wx.Frame instance) 
     self._parent = parent 
     self.renderer = vtk.vtkRenderer() 

     # I create and add my VTK actors here (SNIPPED) 

     self._set_lighting() 

     self.widget = VTKWidget(self,-1) #VTKWidget is a wxVTKRenderWindowInteractor 
     self.widget.GetRenderWindow().AddRenderer(self.renderer) 
     self.widget.Enable(1) 
     self.widget.SetDoubleBuffered(True) 

     self.Bind(wx.EVT_SIZE, self.on_size) 

मैं क्या तत्व निवारण करने के लिए कोशिश कर रहे हैं आकार क्या है MyScene के लिए फ़ंक्शन का उपयोग करके, लेकिन नीचे कुछ भी नहीं मेरी समस्या को हल करता है। पर रिपोर्ट किए गए मान दोनों सही ढंग से कार्य करने और गलत सिस्टम की अपेक्षा की जाती है।

def on_size(self, evt): 
    print "---- MyScene on_size ----" 
    print "Widget size:", self.widget.GetSize() #wxVTKRenderWindowInteractor 
    print "Client size:", self.GetClientSize() #wxPanel.GetClientSize 
    print "Parent size:", self._parent.GetSize() #wxFrame 
    print "Renderer size:", self.renderer.GetSize() #vtkRenderer 
    self.renderer.Clear() 
    self.widget.SetSize((1280, 720)) 
    renWin = self.widget.get_render_window() 
    renWin.SetSize(1280, 720) 
    self._parent.Layout() 
    self.renderer.Clear() 
    renWin.SetSize(1280, 720) 

एक सही ढंग से कार्य प्रणाली पर, उत्पादन होता है:

---- MyScene on_size ---- 
Widget size: (1280, 720) 
Client size: (1296, 720) 
Parent size: (1296, 720) 
Renderer size: (1280, 720) 
इस सवाल में स्क्रीनशॉट में के रूप में

एक "बुरा" विंडोज 7 प्रणाली पर, उत्पादन समान है:

---- MyScene on_size ---- 
Widget size: (1280, 720) 
Client size: (1234, 728) 
Parent size: (1234, 728) 
Renderer size: (1280, 720) 

तो संक्षेप में, मुझे नहीं पता कि कौन सा तत्व गलत तरीके से आकार दिया जा रहा है। वीटीके रेंडरर आकार सही है, क्योंकि फ़ाइल में वीटीके स्क्रीनशॉट लेने के लिए 1280x720 आउटपुट का उत्पादन नहीं होता है, जिसमें कोई सफेद क्लिपिंग नहीं होता है, और जैसा ऊपर बताया गया है, मैं स्क्रीन के सफेद 'क्लिप' भाग का उपयोग करके वीटीके दृश्य से बातचीत कर सकता हूं।

क्या यह एक वीटीके या डब्ल्यूएक्स तत्व सही ढंग से आकार नहीं लगाया जा रहा है? क्या कोई मुझे इस समस्या का निवारण कैसे करें इस पर कोई सुझाव दे सकता है? मैं किस आकार के आकार को देख रहा हूं? मुझे अपने ग्राफिक्स पैनल को 1280x720 पर कड़ी आकार देने और अपने कॉन्फ़िगरेशन पैनल आकार को उचित तरीके से कैसे देना चाहिए?

समस्या पायथन 2.7.5, वीटीके 5.10.1 और wxpython 2.8 का उपयोग करते समय होती है, लेकिन केवल पर कुछ विंडोज 7 मशीनें होती हैं।

+0

wxWidgets नमूने में से एक के साथ समस्या को पुन:। आपको बहुत अधिक बातचीत मिल जाएगी। – Tamer

+0

@ टामर एक WXWidgets उदाहरण है जिसमें एक वीटीके विंडो का उपयोग शामिल है? मुझे संदेह है कि आकार का मुद्दा WX पक्ष की तुलना में चीजों के वीटीके पक्ष से अधिक संबंधित है। – jozzas

+0

क्या आप एक न्यूनतम रननेबल नमूना बना सकते हैं जो समस्या का प्रदर्शन करता है? – Fenikso

उत्तर

1

आप की तरह, मैं vtk और wxpython का उपयोग कर एक एप्लीकेशन विकसित कर रहा हूं, यह कॉकटेल कभी आश्चर्यजनक है! मुझे लगता है कि आपकी समस्या साइजर की अनुपस्थिति से आती है। लिनक्स और विंडोज (7 सहित) पर काम दोनों नीचे टुकड़ा:

class Plotter3d(wx.Panel): 

    def __init__(self, parent, *args, **kwargs): 
     wx.Panel.__init__(self, parent, *args, **kwargs)  
     self.build_panel() 

    def build_panel(self): 
     self.viewer = wx.Panel(self) 
     self.iren = wxVTKRenderWindowInteractor(self.viewer, -1, size=(500,500), flag=wx.EXPAND) 
     self.iren.SetPosition((0,0)) 

     self.iren.Enable(1) 

     # create renderer 
     self.renderer = vtk.vtkRenderer() 
     self.iren.GetRenderWindow().AddRenderer(self.renderer) 

     Sizer = wx.BoxSizer(wx.VERTICAL) 
     Sizer.Add(self.iren, 1, wx.EXPAND, 0) 

     self.viewer.SetSizer(Sizer)   
     Sizer.Fit(self.viewer) 
     self.viewer.Layout() 

आशा है कि यह मदद से आप

संबंधित मुद्दे