Проблема в том, что MDTextField занимает большую часть ширины, а MDButton занимает очень мало места с правой стороны. Пробовал size_hint_x = .5 в обоих l, не работает, .7 .3 не работает. 1:1 не работает. Пробовал зафиксировать ширину кнопок, не работает. А также вертикальное расстояние между каждой строкой слишком велико, а не компактно.
Использование pydroid 3, kivymd2, android
Проблема воспроизводимого кода находится здесь:
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.appbar import MDTopAppBar, MDTopAppBarTitle
from kivymd.uix.label import MDLabel
from kivymd.toast import toast
from kivymd.uix.button import MDButton, MDButtonIcon, MDButtonText
from kivymd.uix.widget import MDWidget
from kivymd.icon_definitions import md_icons
from kivymd.uix.textfield import (
MDTextField,
MDTextFieldHintText,
MDTextFieldMaxLengthText
)
from kivymd.uix.segmentedbutton import (
MDSegmentedButton,
MDSegmentedButtonItem,
MDSegmentButtonLabel
)
from kivymd.uix.dialog import (
MDDialog,
MDDialogHeadlineText,
MDDialogSupportingText,
MDDialogButtonContainer
)
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.core.text import Label as CoreLabel
from kivy.metrics import dp
class TxtField(MDTextField):
def __init__(self, ilen = 7, htxt="", shintx=0.7, **kwargs):
super().__init__(**kwargs)
self.mode = "outlined" #"filled"
self.size_hint_x = .5
self.pos_hint={"center_x": .5}
self.input_filter = lambda s, u: s if (
len(self.text) < ilen and s.isdigit()
) else ""
if not htxt: htxt = "input:"
self.add_widget(
MDTextFieldHintText(
text = htxt
)
)
class mkbtn(MDButton):
def __init__(
self,
text,
style="elevated", #
radius=[20,20,20,20],
icon=None,
func=lambda x: dummy_func(x), **kwargs):
super().__init__(**kwargs)
self.style = style
self.radius = radius
self.size_hint_x = None
self.pos_hint={"center_x": .5}
#padding=[5, 5, 5, 5]
#self.adaptive_width=True
#self.size_hint_min_x = 0.3
self.wide = dp(120)
if icon: self.add_widget(MDButtonIcon(icon))
self.add_widget(MDButtonText(text=text))
self.bind(on_release=func)
def dummy_func(x="", y=""):
pass
class MainScreen(MDScreen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.md_bg_color = [1, 1, 1, 1]
#md_bg_color: self.theme_cls.secondaryContainerColor
self.main_layout = MDBoxLayout(orientation="vertical")
self.app_bar = MDTopAppBar(type="small")
self.abtitle = MDTopAppBarTitle(
text="WOS Squad Ratio (Bear/CJ)",
halign="center"
)
self.app_bar.add_widget(self.abtitle)
self.content_layout = MDBoxLayout(orientation="vertical", padding=[5, 5, 5, 5], spacing=dp(10),)
self.hlay1 = MDBoxLayout(orientation="horizontal", padding=[5, 5, 5, 5], spacing=dp(10))
self.bdctf = TxtField(htxt="Bear DC", ilen=6)
self.prof_btn = mkbtn("Profiles", icon="triangle-small-down")
self.hlay1.add_widget(self.bdctf)
self.hlay1.add_widget(self.prof_btn)
#self.hlay1.add_widget(MDWidget())
###
self.hlay2 = MDBoxLayout(orientation="horizontal", padding=[5, 5, 5, 5], spacing=dp(10),)
self.cdctf = TxtField(htxt="CJ DC", ilen=6)
self.aprof_btn = mkbtn("Add Profiles")
self.hlay2.add_widget(self.cdctf)
self.hlay2.add_widget(self.aprof_btn)
###
self.hlay3 = MDBoxLayout(orientation="horizontal", padding=[5, 5, 5, 5], spacing=dp(10),)
self.titf = TxtField(htxt="Total Infantry", ilen=7)
self.cb_btn = mkbtn("Calc Bear")
self.hlay3.add_widget(self.titf)
self.hlay3.add_widget(self.cb_btn)
###
self.hlay4 = MDBoxLayout(orientation="horizontal", padding=[5, 5, 5, 5], spacing=dp(10),)
self.tltf = TxtField(htxt="Total Lancer", ilen=7)
self.cc_btn = mkbtn("Calc CJ")
self.hlay4.add_widget(self.tltf)
self.hlay4.add_widget(self.cc_btn)
###
self.hlay5 = MDBoxLayout(orientation="horizontal", padding=[5, 5, 5, 5], spacing=dp(10),)
self.tmtf = TxtField(htxt="Total Lancer", ilen=7)
self.sd_btn = mkbtn("Save Data")
self.hlay5.add_widget(self.tmtf)
self.hlay5.add_widget(self.sd_btn)
###
self.tlbl = MDLabel(halign="left",role="large",padding=[5, 0, 0, 500],text = "")
def cng_lbl(txt): self.tlbl.text = txt
###
self.content_layout.add_widget(self.hlay1)
self.content_layout.add_widget(self.hlay2)
self.content_layout.add_widget(self.hlay3)
self.content_layout.add_widget(self.hlay4)
self.content_layout.add_widget(self.hlay5)
self.content_layout.add_widget(MDWidget())
###
self.main_layout.add_widget(self.app_bar)
self.main_layout.add_widget(self.content_layout)
###
self.add_widget(self.main_layout)
class MyApp(MDApp):
def build(self):
root = MainScreen()
return root
if __name__ == "__main__":
MyApp().run()