2015-02-23 76 views
0

我想在客户端&服务器基础上使用kivy & python进行文件选择器的代码...其余部分代码工作正常,但给出的部分给出的属性错误为“'ClientScreen'has没有属性“openfile_from_filechooser””Python&Kivy属性错误:

在这部分我想提出的错误...我有搜索,我怎么能解决属性错误,但没有工作的...

class ClientScreen(Screen): 
    def __init__(self, **kwargs): 

     super(ClientScreen, self).__init__(**kwargs) 

     def openfile(self, path, filename): 
      f = open(os.path.join(path, filename[0])) 
      print f.read() 
      #self.clear_widgets() 

     def selected(self, filename): 
      print "selected: %s" % filename[0] 

     def openfile_from_filechooser(self, filechooser): 
      self.openfile(filechooser.path, filechooser.selection) 

     def selected_from_filechooser(self, filechooser): 
      self.selected(filechooser.selection) 


     def terminate(instance): 

      sys.exit() 

     def data(instance): 
      global IP 
      global conn 
      global host 
      global port 
      global address 

      print("Inside Data") 

      self.clear_widgets() 

      print("Inside File Operation") 

      button1 = Button(text = 'Open',size_hint = (None,None),pos = (0,0)) 
      self.add_widget(button1) 
      button1.bind(on_release=partial(self.openfile_from_filechooser, filechooser)) 

      button2 = Button(text = 'Send',size_hint = (None,None),pos = (100,0)) 
      self.add_widget(button2) 
      #button2.bind(on_release=partial(self.selected_from_filechooser, filechooser)) 
     def connection(instance): 
      global IP 
      global conn 
      global host 
      global port 
      global address 

      self.clear_widgets() 
      text = IP.text 
      print(text) 
      self.add_widget(Label (text = text)) 
      print "Imported socket module" 
      print "Imported sys module used for termination condition" 
      conn = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
      print('Socket created') 
      host = IP.text 
      print "Host Name:",host 

      port = 8000 
      print "Port value accessed",port 

      try: 
       self.clear_widgets() 
       address = (host,port) 
       print('Value of Address:',address) 
       print('Trying to connect...') 
       print('Initiating TCP server connection') 
       self.add_widget(Label(text = 'Connected....Press Next To Proceed...')) 

       button1 = Button(text = 'Next',size_hint = (None,None),pos = (0,0)) 
       self.add_widget(button1) 
       button1.bind(on_press = data) 

      except socket.error as msg: 
       self.clear_widgets() 
       self.add_widget(Label(text = 'Sorry...Unable to create socket...press Finish to terminate...')) 

       button2 = Button(text = 'Finish',size_hint = (None,None),pos = (0,0)) 
       self.add_widget(button2) 
       button2.bind(on_press = terminate) 

       print('Socket not created') 


     def ip_addr(instance): 
      global IP 

      self.clear_widgets() 

      self.add_widget(Label (text = "Enter the destination device's IP address")) 
      IP = TextInput(multiline=False, size_hint = (1,0.1), pos = (0,200)) 
      print(IP.text) 
      self.add_widget(IP) 

      button1 = Button(text = 'Enter',size_hint = (None,None),pos = (0,0)) 
      self.add_widget(button1) 
      button1.bind(on_press = connection) 


     global IP 
     self.add_widget(Label(text = 'Working as Client...Press Next to proceed')) 
     button1 = Button(text = 'Next',size_hint = (None,None),pos = (0,0)) 
     self.add_widget(button1) 
     button1.bind(on_press = ip_addr) 

这将是很有益如果有人能指出我的错误在哪里&我该如何纠正这个错误

回答

1

您的缩进是错误的,所有功能都在您的__init__而不是方法中声明。

您也不会调用super(ClientScreen, self).__init__(**kwargs),这会导致其他问题,因为它意味着屏幕和小部件内部未初始化。

+0

我再次对它进行缩进......但仍然不起作用 – 2015-02-24 04:24:36

+0

我曾经叫超级(ClientScreen,self).__ init __(** kwargs),但是我没有发布整个ClientScreen类。由于ClientScreen类的其他部分工作正常......我只是在添加之前提到的代码后才会出错 – 2015-02-24 08:47:43

+0

发布您的新代码。 – inclement 2015-02-24 10:48:44