Python特质GUI递归深度



我正在使用Enthought的特征在Python开发GUI。如果我在MainWindow类中使用"项目"标签的顺序,则我不断获得" RuntimeError:最大递归深度",则代码可以正常执行。我似乎找不到有关为什么会发生这种情况的任何文件。似乎与查科情节有关。以下是我的测试代码。

from chaco.api import ArrayPlotData, Plot
from traits.api import HasTraits, Instance, String, Float, Enum, Button, Str
from traitsui.api import Handler, View, Item, Group, HSplit, NoButtons, VGroup, VGrid
from pyface.api import GUI
from threading import Thread
from time import sleep
from enthought.enable.component_editor import ComponentEditor
from scipy import rand, indices, exp, sqrt, sum
import numpy as np
from PIL import Image
import matplotlib.image as mpimg
from enthought.chaco.api import gray
from enthought.savage.traits.ui.svg_button import SVGButton

class User_Input_Panel(HasTraits):
    User = Str(name='User', label="User Name")
    Sample_Name = Str(name='Sample_Name',label="Sample Name")
    Path = Str(name='Path', label="Save Location", style = 'readonly')
    #I use this to create a folder icon on the button
    #~ Save_Folder_Button = SVGButton(label='Choose save Location', 
                            #~ filename=Folder-drag-accept.svg', 
                            #~ width=28, 
                            #~ height=28 
                           #~ )

    #~ #Create the User Information panel
    User_Information_Panel = View(VGroup(
                                    VGrid(
                                          Item('User'), 
                                          Item('Sample_Name'), 
                                          Item('Path', width=.700, visible_when = 'Save_Visible == True'),                              
                                          #Item('Save_Folder_Button', show_label=False),
                                          ),
                                    show_border=True, label="User Information"
                                    ))
    def _Save_Folder_Button_fired(self, event):
        print("Pushed the Save Folder")
        #self.file, self.dir = wxOpenFile(multi=False)
        #fdir = GUI_tools.wxOpenFile()
        #fdir = GUI_tools.wxSavePath()

#I'm planning on setting up threading later
class MainWindowHandler(Handler):
    def close(self, info, is_OK):
        #~ if (info.object.user_input.acquisition_thread and 
            #~ info.object.user_input.acquisition_thread.isAlive()):
            #~ info.object.user_input.acquisition_thread.wants_abort = True
            #~ while info.object.user_input.acquisition_thread.isAlive():
                #~ sleep(0.1)
            #~ GUI.process_events()
        return True

class MainWindow(HasTraits):
    plot = Instance(Plot)
    plotdata = Instance(ArrayPlotData, ())
    user_input = Instance(User_Input_Panel, ())

    def _user_input_default(self):
        return User_Input_Panel(plotdata = self.plotdata)
    Save_Folder_Button = SVGButton(label='Choose save Location', 
                            filename='C:Python27ExamplesMill_GUITescan_BatchScanFolder-drag-accept.svg', 
                            width=28, 
                            height=28 
                           )
    def _plot_default(self):
        self.plotdata = ArrayPlotData(imagedata=np.zeros((100,100)))
        plot = Plot(self.plotdata)
        plot.img_plot('imagedata')
        self.plot = plot
        return plot
    # If I flip the "Item('user_input'" with "Item('plot') the code will run...
    view = View(VGroup(Item('user_input', style = 'custom', show_label = False), 
                       Item('plot', editor = ComponentEditor(), dock = 'vertical'),
                       show_labels = False),
                       resizable = True, handler = MainWindowHandler(),
                       buttons = NoButtons)
if __name__ == '__main__':
    MainWindow().configure_traits()

有人知道为什么您会使用此代码遇到递归错误?我必须在我的User_input面板下方显示图块,以便用户可以看到他们正在收集的实时时间数据。

欢呼,湿气

您需要从_plot_default方法中删除以下行: self.plot = plot 为了在特征中发生这种情况,您只需要返回该绘图对象,而分配为self.plot将由特征完成。递归错误发生是因为您试图访问试图设置它的方法中对象的plot属性。

相关内容

  • 没有找到相关文章

最新更新