簡體   English   中英

kivy:我的屏幕管理器代碼不適用於scrollview

[英]kivy: My screenmanager code is not working with scrollview

試圖讓我與屏幕管理器和scrollview一起工作。 我不明白為什么它不起作用。 如果我刪除滾動視圖並僅將其保留為簡單的框和按鈕(如代碼中的屏幕2),則效果很好。 當我嘗試添加帶有按鈕的滾動視圖時,我得到的只是一個空白屏幕。

有人可以幫我指出我的錯誤嗎? 我是新手。

import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView

from urllib import urlopen
from re import findall, MULTILINE, sub

heading = []
date = []
id_ref = []

URL_list = 'web_site_here.xml'

O_WL = urlopen(URL_list).read()


class ScreenOne(Screen):

    def __init__ (self,**kwargs):
        super (ScreenOne, self).__init__(**kwargs)
        Buttonlayout = GridLayout(orientation='vertical',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')
            btn.bind(on_press=(lambda a:self.changer()))
            Buttonlayout.add_widget(btn)
        root = ScrollView()
        root.add_widget(Buttonlayout)

    def changer(self,*args):
        self.manager.current = 'story_screen'

class ScreenTwo(Screen):

    def __init__(self,**kwargs):
        super (ScreenTwo,self).__init__(**kwargs)
        story_box = BoxLayout(orientation='vertical')
        story_heading = Label(text="testing")
        back = Button(text="Back",size_hint_y=None, size_y=50)
        back.bind(on_press=self.changer)
        story_box.add_widget(story_heading)
        story_box.add_widget(back)
        self.add_widget(story_box)

    def changer(self,*args):
        self.manager.current = 'but_screen'

class TestApp(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):
        my_screenmanager = ScreenManager()
        screen1 = ScreenOne(name='but_screen')
        screen2 = ScreenTwo(name='story_screen')
        my_screenmanager.add_widget(but_screen)
        my_screenmanager.add_widget(story_screen)
        return my_screenmanager

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

提前致謝。

您至少需要將您的root添加到ScreenOne

class ScreenOne(Screen):

    def __init__ (self,**kwargs):
        ...
        root = ScrollView()
        root.add_widget(Buttonlayout)
        self.add_widget(root)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM