我已经将GridLayout添加到ScrollView中,并且正在从python程序动态添加到GridLayout中的小部件。与其使用更多的窗口空间,不如调整旧小部件的高度。
我尝试将BoxLayout放入GridLayout中,但是它不起作用。 我还尝试将小部件直接添加到ScrollView,但是我发现ScrollView仅支持一个小部件。
我的kv代码:
<Downloading>:
my_grid: mygrid
GridLayout:
cols: 1
size_hint_y : None
hight: self.minimum_height
id: mygrid
我的python代码:
class Downloading(ScrollView):
set_text = ObjectProperty()
my_grid = ObjectProperty()
def __init__(self, select, link, path, username, password):
self.select = select
self.link = link
self.path = path
self.username = username
self.password = password
self.p_bar = []
self.stat = []
self.parent_conn, self.child_conn = Pipe()
p = Process(target=main, args=(self.child_conn, self.select,
self.link, self.path,
self.username, self.password))
p.start()
super().__init__()
self.event = Clock.schedule_interval(self.download_GUI, 0.1)
def newFile(self, title):
# self.newId = "stat" + str(len(self.p_bar) + 1)
self.stat.append(Label(text=''))
self.p_bar.append(ProgressBar())
self.my_grid.add_widget(Label(text=title))
self.my_grid.add_widget(self.stat[-1])
self.my_grid.add_widget(self.p_bar[-1])
def download_GUI(self, a):
temp = self.parent_conn.recv()
print(temp)
if temp == "new":
self.downloading = True
return
if self.downloading:
self.newFile(temp)
self.downloading = False
return
if type(temp) == type({}):
self.complete = temp['complete']
if not self.complete:
status = "{0}//{1} @ {2} ETA: {3}".format(temp['dl_size'],
temp['total_size'],temp['speed'],temp['eta'])
self.stat[-1].text = status
self.p_bar[-1].value = temp['progress']
return
if temp == "end":
self.event.cancel()
Clock.schedule_once(exit, 3)
答案 0 :(得分:0)
我相信您只需要为添加到GridLayout
的每个小部件设置高度。例如:
self.my_grid.add_widget(Label(text=title, size_hint=(1, None), height=50))
您可能需要对要添加的其他小部件执行相同的操作。 GridLayout
可以为最初添加的窗口小部件提供更多的空间,但不会比指定的height
更加狭窄。
答案 1 :(得分:0)
对kv文件应用以下更改
<Downloading>:
size: self.size
my_grid: mygrid
GridLayout:
cols: 1
size_hint_y : None
row_default_height: '25dp'
row_force_default: True
id: mygrid
并将此行添加到构造函数(__init__
)的末尾,它按预期工作。
self.my_grid.bind(minimum_height=self.my_grid.setter('height'))