Минимальная_высота Kivy ScrollView больше не является динамической с вложенными макетами в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Минимальная_высота Kivy ScrollView больше не является динамической с вложенными макетами в Python

Сообщение Anonymous »

В настоящее время я борюсь с вложенным макетом Kivy и представлением scorll.
Я динамически добавляю или удаляю таблицу с помощью некоторых кнопок.
По мере роста страницы я ожидаю, что self.minimum_height родительского макета CreatePly изменится, но это не так.
Есть ли аккуратный способ динамически изменить высоту моего просмотра прокрутки, или мне придется сделать это в стиле Caveman и увеличить ее вручную после создание каждого виджета?
Код Python:

Код: Выделить всё

#This file contains the graphical user interface logic of the DIS creator

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.metrics import dp
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.togglebutton import ToggleButton

class DIS3(App):
pass

class CreatePly(GridLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)

#Dimensional control
self.spacing = dp(2)
self.padding = dp(10)
self.cols = 1
self.size_hint = (1, None)
self.height = self.minimum_height #I expect this to dynamically change with the nested layouts.  It does not.

#Varibales
self.constituent_name = []
self.constituent_areaweight = []
self.structural_toggle = []

#Add and remove consituents
#Header
self.add_remove_header = BoxLayout()
self.add_remove_header.size_hint = (1, None)
self.add_remove_header.height = dp(40)

label = Label(text="Add constituents to create a ply")
self.add_remove_header.add_widget(label)
self.add_widget(self.add_remove_header)

#Add remove buttons
self.add_remove_buttons = GridLayout()
self.add_remove_buttons.cols = 4
self.add_remove_buttons.size_hint = (1, None)
self.add_remove_buttons.height = dp(40)
self.add_remove_buttons.add_widget(Widget())
button = Button(text="+", size_hint=(None, None), width=dp(40), height=dp(40))
button.bind(on_press = lambda x: self.add_constituent_press())
self.add_remove_buttons.add_widget(button)
button = Button(text="-", size_hint=(None, None), width=dp(40), height=dp(40))
button.bind(on_press = lambda x: self.remove_constituent_press())
self.add_remove_buttons.add_widget(button)
self.add_remove_buttons.add_widget(Widget())
self.add_widget(self.add_remove_buttons)

#Constituent table
self.constituent_table = GridLayout()
self.constituent_table.cols = 3

label = Label(text="Consituent name", size_hint=(0.55, None), height=dp(20))
self.constituent_table.add_widget(label)
label = Label(text="Areal weight (g/m2)", size_hint=(0.3, None), height=dp(20))
self.constituent_table.add_widget(label)
label = Label(text="Structural?", size_hint=(0.15, None), height=dp(20))
self.constituent_table.add_widget(label)

textinput = TextInput(size_hint=(0.55, None), height=dp(40))
self.constituent_name.append(textinput)
self.constituent_table.add_widget(textinput)
textinput = TextInput(size_hint=(0.3, None), height=dp(40))
self.constituent_areaweight.append(textinput)
self.constituent_table.add_widget(textinput)
toggle = ToggleButton(text="No", size_hint=(0.15, None), height=(dp(40)))
toggle.bind(state=(lambda self, x: CreatePly.structural_constituent_toggle(self, toggle)))
self.structural_toggle.append(toggle)
self.constituent_table.add_widget(toggle)
self.add_widget(self.constituent_table)

#Build ply button
self.footer = GridLayout()
self.footer.cols = 3

self.footer.size_hint = (1, None)
self.footer.height = dp(40)
self.footer.add_widget(Widget())
button = Button(text="Create ply", size_hint=(None, None), width=dp(120), height=dp(40))
button.bind(on_press = lambda x: self.create_ply())
self.footer.add_widget(button)
self.footer.add_widget(Widget())
self.add_widget(self.footer)

#Functions
def structural_constituent_toggle(self, toggle):
if toggle.state == "normal":
toggle.text = "No"
else:
toggle.text = "Yes"

def add_constituent_press(self):
textinput = TextInput(size_hint=(0.55, None), height=(dp(40)))
self.constituent_name.append(textinput)
self.constituent_table.add_widget(textinput)

textinput = TextInput(size_hint=(0.3, None), height=(dp(40)))
self.constituent_areaweight.append(textinput)
self.constituent_table.add_widget(textinput)

toggle = ToggleButton(text="No", size_hint=(0.15, None), height=(dp(40)))
toggle.bind(state=(lambda self, x:  CreatePly.structural_constituent_toggle(self, toggle)))
self.structural_toggle.append(toggle)
self.constituent_table.add_widget(toggle)

def remove_constituent_press(self):

if len(self.constituent_name) == 1:
pass

else:
self.constituent_table.remove_widget(self.constituent_name[-1])
del self.constituent_name[-1]

self.constituent_table.remove_widget(self.constituent_areaweight[-1])
del self.constituent_areaweight[-1]

self.constituent_table.remove_widget(self.structural_toggle[-1])
del self.structural_toggle[-1]

def create_ply(self):
pass

#Run loop
DIS3().run()
Код файла KV:

Код: Выделить всё

#This file contains the graphical user interface elements of the DIS creator app

#This is the layout of the entire screen
MainLayout:

:
#Background colour
canvas.before:
Color:
rgba:(.3,.3,.3,1)
Rectangle:
pos: self.pos
size: self.size

padding: '10dp'
spacing: '10dp'
MenuLayout:
FocusFrame:

#This is the layout for the menu
:
#Background colour
canvas.before:
Color:
rgba:(0,0,0,1)
Rectangle:
pos: self.pos
size: self.size

#Dimension control
size_hint: None, 1
width: "160dp"
spacing: "2dp"
padding: "10dp"

Button:
text: "Database"
size_hint: 1, None
height: "40dp"

Button:
text: "Create ply"
size_hint: 1, None
height: "40dp"

Button:
text: "Create preform"
size_hint: 1, None
height: "40dp"

Button:
text: "Plan infusion"
size_hint: 1, None
height: "40dp"

Button:
text: "Write DIS"
size_hint: 1, None
height: "40dp"

Button:
text: "Review DIS"
size_hint: 1, None
height: "40dp"

#This is the layout for the scrollable focus frame
:
canvas.before:
Color:
rgba:(0,0,0,1)
Rectangle:
pos: self.pos
size: self.size

CreatePly:
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»