2015-11-20 105 views
0

我試圖熟悉kivy,通過這樣做,我想我可以爲我訪問量最大的一些網站製作一個小型新聞閱讀器。 (他們都有一個rss的形式)Kivy:嘗試使用按鈕滾動網格佈局

我掙扎着圍繞着基維的頭,它似乎是我生命中的一個新怪物。

我有下面的代碼。我想要做的是創建一個按鈕列表(我可以做得很好),然後讓該列表滾動(在一些網站中有很多新聞提要)。

Im努力獲取列表中的可滾動部分。現在它只是試圖將所有的按鈕放在窗口的底部,這使得它看起來全部被壓扁和粗糙,我認爲這與size_hint_y = none有關,但我知道文檔提到你需要禁用gridview的hint_y爲scrollview的工作(或至少這是我如何解釋它)。

代碼:

import kivy 
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.base import runTouchApp 
from kivy.lang import Builder 
from kivy.uix.button import Button 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.scrollview import ScrollView 

#Importing modules for data capture for website and reading. 
from urllib import urlopen 
from re import findall, MULTILINE, sub 


#news list data 
heading = [] 
date = [] 
id_ref = [] 

URL_list = 'my_sites.xml' 

O_WL = urlopen(URL_list).read() 

class Screen(GridLayout): 
    def __init__(self,**kwargs): 
     super(Screen,self).__init__(**kwargs)   
     self.cols = 1 
     self.spacing = 2 
     self.size_hint_y=None 
     for i in range(len(id_ref)): 
      btn_new = Button(text = heading[i],height=50, text_size=(300,None),font_size='15sp') 
      self.add_widget(btn_new) 
     root = ScrollView(size_hint=(None,None),size=(400,400)) 
     root.add_widget(self) 

class rss_class(App): 
    def build(self): 

     O_WL = urlopen(URL_list).read() 
     id_ex = findall('<id>(.*)</id>',O_WL) 
     for i in id_ex: 
      id_ref.extend([i]) 

     head_ex = findall('<headline>(.*)</headline>',O_WL) 
     for i in head_ex: 
      heading.extend([i]) 

     date_ex = findall('<modifiedDate>(.*)</modifiedDate>',O_WL) 
     for i in date_ex: 
      date.extend([i]) 
    print id_ref 
    return Screen() 

runTouchApp(rss_class()) 

在此先感謝您的幫助和指導。

+0

你能否修復縮進問題和答案。 –

+0

@ Micheled'Amico,確定使用正確的縮進更新了代碼。希望有一個更簡單的方法來做到這一點。 – GenGen

回答

1

好吧,所以經過大量撞擊牆壁後,我設法回答了我自己的問題,但這帶來了許多更多的未知數。哦,學習新事物的快樂。哈哈。

這是我的代碼,回答了我自己的問題。我希望這能幫助未來的其他人。

from kivy.app import App 
from kivy.uix.scrollview import ScrollView 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 

#Importing modules for data capture for website and reading. 
from urllib import urlopen 
from re import findall, MULTILINE, sub 

#news list data 
heading = [] 
date = [] 
id_ref = [] 

URL_list = 'my_sites.xml' 

O_WL = urlopen(URL_list).read() 

class Main_app(App): 

    O_WL = urlopen(URL_list).read() 

    id_ex = findall('<id>(.*)</id>',O_WL) 
    for i in id_ex: 
     id_ref.extend([i]) 

    head_ex = findall('<headline>(.*)</headline>',O_WL) 
    for i in head_ex: 
     heading.extend([i]) 
    date_ex = findall('<modifiedDate>(.*)</modifiedDate>',O_WL) 
    for i in date_ex: 
     date.extend([i]) 

    def build(self): 

     Buttonlayout = GridLayout(cols=1, spacing=2, size_hint_y=None) 
     Buttonlayout.bind(minimum_height=Buttonlayout.setter('height')) 
     for i in range(len(id_ref)): 
      btn = Button(text=heading[i], size_hint_y=None, height=80,text_size=(350,None),font_size='12sp') 
      Buttonlayout.add_widget(btn) 
     root = ScrollView() 
     root.add_widget(Buttonlayout) 
     return root 


if __name__ == '__main__': 
Main_app().run()