2017-07-30 42 views
0

我儘量讓一個應用程序,從用戶需要值,並把它們放在一個MySQL數據庫,但是當我點擊按鈕,它給我的錯誤kivy floatlayoutApp.x格式無效

floatlayoutApp.x has an invalid format (got <__main__.video object at 0x0000000007371BE0>) 

我不知道這裏有什麼問題,所以我沒有嘗試過別的 這裏是我的代碼

from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import Column,Integer,String 
import sqlalchemy 
from kivy.config import Config 
Config.set('kivy', 'keyboard_mode', 'systemandmulti') 

eng = create_engine('mysql://root:[email protected]:3306/mydb') 

Session=sessionmaker(bind = eng) 

session = Session() 

base=declarative_base() 

class video(base): 
    __tablename__= 'videos_test' 
    video_id=Column(Integer,primary_key=True) 
    video_name=Column(String(100),index=True) 
    video_url=Column(String(255)) 
base.metadata.create_all(eng) 


class floatlayoutApp(FloatLayout): 

    name="" 
    url="" 

    def create_instance(self,name,url): 
     try: 
      self.x=video(video_name=self.name,video_url=self.url) 
      session.add(self.x) 
      session.commit() 
     except ValueError as err: 
      print (err) 



class YCEApp(App): 
    def build(self): 
     return floatlayoutApp() 

YCE=YCEApp() 
YCE.run() 

和這就是我的kv.file代碼

<[email protected]>: 
    font_size: 32 

<FloatLayout>: 
    id: YCE 
    display: entry 
    padding: 10 
    spacing: 10 
    canvas.before: 
     Rectangle: 
      pos: self.pos 
      size: self.size 
      source: "image1.jpg" 
    BoxLayout: 
     TextInput: 
      id: entry 
      font_size: 32 
      multiline: False 
      size_hint: .45, .2 

     CustButton: 
      size_hint: .45,.2 
      text:"enter video name" 
      background_color:1,1,1,1 
      on_press: root.name = entry.text 
     CustButton: 
      text:"enter video url" 
      size_hint: .45 , .2 
      pos_hint:{"center_x":.5,"top":1} 
      on_press: root.url = entry.text 
     CustButton: 
      text:"create" 
      size_hint: .45 , .2 
      pos_hint:{"center_x":.5,"top":1} 
      on_press: root.create_instance(root.name,root.url) 

我只是不知道什麼是問題,我認爲問題是在創建實例方法

+1

'self.x =視頻(VIDEO_NAME = self.name,VIDEO_URL = self.url)'FloatLayout早已屬性x是x軸上的位置。你想在這裏做什麼?你試圖分配的東西不符合它的期望。它期望x achses的價值。 – PalimPalim

+0

我想要做的是從textinput採取video_name和video_url,然後創建一個實例f從視頻類,這是從sqlalchemy declarative_base繼承,並通過這種方式,我可以通過這些方法插入到表'videos_test'這些方法session.add(instance)session.commit()我希望幫助理解我在這裏試圖做什麼 –

+1

self.x已經被佔用了。你爲什麼不用像self.video那樣的東西? – PalimPalim

回答

0

我也有類似的問題,那是因爲我被規定在numpy的的float64 D型的位置。我需要將其轉換爲原生Python類型(浮點):

例如,

lpos = np.array([50.0, 40.0]) 

# Convert lpos back from float64 to float 
lpos = [lpos[0].item(), lpos[1].item()] 

l = Label(text='hello', pos=lpos)