2016-04-04 25 views
-2

Kivy için yeni ve bir dizede kelimeleri saymak ve yeni bir pencerede sözcük sayısını görüntülemek için bir Uygulama yapmaya çalışıyorum, Ve bu hata iletisini almaya devam ediyorum str() kullanarak bile. Tip-hatası:Kivy (Python) TypeError: beklenen dize veya arabellek

<CountRoot>: 
orientation: "vertical" 
padding: root.width * .02, root.height * .02 
spacing: "10dp" 


TextInput: 
    id: text_input 
    hint_text: "Enter Text" 
    font_size: "30dp" 

Button: 
    text: "Press Me" 
    on_release: root.clk(text_input.text) 
+0

hata mesajı hata olduğunu hattı söyler. –

+0

'res' nedir? Bu bir ip mi? Emin misiniz? Kontrol ettin mi? [Belgeler dizelerin bir listesidir] (https://docs.python.org/2/library/re.html#re.findall). –

+0

res '' re.findall ("(\ S +)", metin) '' sonucudur ve bir sayıdır (int) –

cevap

2

Ben Sen (kod açıklanandan farklı bir şey söylüyor gibi) elde etmek istediğinizi anlamış emin değilim, ama metin dize içeriğin kendisini etiketlemek yerine Sen Jaques olarak (Etiket widget'ı atama yapıldı her iki şekilde dedim). Hatırlanması gereken

Bir şey daha:

KV:

... 
    Button: 
     text: "Press Me" 
     on_release: root.clk(text_input.text) 
açılan içerik bir widget'ı

Yani bunu yapabilirsiniz (aşağıda cevapla Etiket geçiyorum) kabul

py:

class CountRoot(BoxLayout): 
    def clk(self, text_input): 
     res = re.findall("(\S+)", text_input) 
     nw = Popup(title="Our Title!", content=Label(text='No of words: ' + str(len(res)))) 
     nw.open() 

veya (kivy kök Widget kimlikleri sözlüğe dirrectly reffering):

KV:

... 

Button: 
    text: "Press Me" 
    on_release: root.clk() 

py:

class CountRoot(BoxLayout): 
    def clk(self): 
     text = self.ids.text_input.text 
     res = re.findall("(\S+)", text) 
     nw = Popup(title="Our Title!", content=Label(text='No of words: ' + str(len(res)))) 
     nw.open() 
+0

İlk çözüm işe yaradı! Teşekkür ederim :) –

-1

yılında
text = Label(text="Hello, {}!".format(text_input)) 
, atanan

değişken metindir : Burada

from kivy.app import App 
from kivy.uix.popup import Popup 
from kivy.uix.label import Label 
from kivy.uix.boxlayout import BoxLayout 
import re 


class CountRoot(BoxLayout): 
    def clk(self, text_input): 

     text = Label(text="Hello, {}!".format(text_input)) 
     res = re.findall("(\S+)", text) 
     nw = Popup(title="Our Title!", content=res,size_hint=(.7, .7)) 
     nw.open() 


class CountApp(App): 
    def build(self): 
     return CountRoot() 


if __name__ == "__main__": 
    CountApp().run() 

kivy dosyasıdır: beklenen dize veya İşte tampon kodudur Bir dize yerine bir Label nesnesi. Böyle bir nesne üzerinde regex araması yoktur. Bunun yerine bir dizede kullanın.

+0

Bu yüzden sorunun nerede olduğunu söyleyemedim –

+0

Bu yüzden etiketin içeriğini etiketin kendisinden değil, araştırın. –

+0

emm Ne kadar? ? ? –

İlgili konular