python - Kivy:GridLayout 中的奇数标签间距
问题描述
我正在制作一个可以从不同网站获取文章的网络爬虫。为此,我将文章小部件动态添加到它们各自的 GridLayouts 中。但是,有些屏幕上的文章是均匀分布的,而另一些则是零星分布的。似乎文章越长,空间就越少。下面是我认为相关的代码片段(我会包括所有内容,但它是 1300 多行)。
例子:
良好的间距
间距不好
Python:
def text_collision(self):
labels = [i for i in self.news_articles.children]
for label in labels:
font_instance = 35
label.size = label.texture_size
if label.collide_point(*label.to_widget(*Window.mouse_pos)):
animation = Animation(font_size=font_instance + 2, s=1 / 60, duration=.06)
label.color = (.96, .60, .61, 1)
if label.count == 0:
animation.start(label)
label.count += 1
else:
label.count = 0
Animation.cancel_all(label)
label.color = (1, 1, 1, 1)
label.font_size = font_instance
def articles(self):
titles = self.csv_load()[0]
links = self.csv_load()[1]
for lnk, items in zip(links, titles):
if len(items.strip()) == 0 or len(lnk.strip()) == 0:
continue
article_widget = Label(text="[ref={}][b]{}[/b][/ref]".format(lnk, items), markup=True,
font_size=35, text_size=(700, None), halign='left', size_hint_y=None)
self.news_articles.add_widget(article_widget)
article_widget.on_ref_press = self.openlink
基维:
ScrollView:
do_scroll_x: False
do_scroll_y: True
pos: (50, -140)
smooth_scroll_end: 5
GridLayout:
id: articles
cols: 1
col_default_width: 700
padding: [0, 140, 0, 0]
size_hint_y: None
height: self.minimum_height
spacing: 150
解决方案
当您在 中使用height: self.minimum_height
时GridLayout
,您必须heights
为孩子定义好。所以size_hint_y=None
不提供值height
会导致问题。尝试为这样的规则创建一个kv
规则:Aricle_Widget
class Article_Widget(Label):
pass
并且在kv
:
<Article_Widget>:
markup: True
font_size: 35
text_size: (700, None)
halign: 'left'
size_hint_y: None
height: self.texture_size[1]
然后在你的articles()
方法中:
article_widget = Article_Widget(text="[ref={}][b]{}[/b][/ref]".format(lnk, items))
我没有测试过这段代码,所以我不能保证它会起作用。但想法是有Label
确定它的height
,这样GridLayout
才能正确计算self.minimum_height
。
推荐阅读
- python - 如何保持点击自动点击器?
- git - 将请求从开发拉到主控,如何保持分支“均匀/同步”
- c++ - C ++没有构造函数实例与参数列表匹配
- python-3.x - 使用python从镶木地板文件中提取列名和数据类型
- javascript - 反应渲染道具方法没有被调用
- java - 测试无法运行,编译已结束
- excel - Excel VBA 用于在不使用范围的情况下制作多个图形
- php - php mysql准备好的语句不更新空值
- node.js - 在路由器基础设置上遇到错误 TypeError('Router.use() 需要一个中间件函数但得到一个 ' + gettype(fn))
- c++ - 'std::thread' 如何确定传递给构造函数的可变参数的数量