Уменьшить ширину столбца в сеточном описании

#kivy

#kivy

Вопрос:

У меня есть этот код:

 import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.uix.button import Button

class TedeGrid(GridLayout):
    def __init__(self, **kwargs):
        super(TedeGrid, self).__init__(**kwargs)
        self.cols = 3
        self.img = Image(source='sriyantra.png')
        self.add_widget(self.img)
        self.add_widget(Label(text="HELLO"))

        self.inside = GridLayout()
        self.inside.cols = 1

        self.add_widget(self.inside)

        self.next_button = Button(text="Next")
        self.inside.add_widget(self.next_button)

        self.prev_button = Button(text="Prev")
        self.inside.add_widget(self.prev_button)

class Tedegraph(App):
    def build(self):
        return TedeGrid()

if __name__ == "__main__":
    Tedegraph().run()
  

Я хотел бы уменьшить ширину третьего столбца, например, на 10% от ширины первого столбца.

Еще лучше было бы, если бы не было кнопки, но справа была бы небольшая область касания (которая реагирует на next событие), а слева была бы небольшая область касания (которая реагирует на prev событие)

Ответ №1:

Проверьте это, я немного переработал ваш код, надеюсь, это имеет смысл. Это так, как вы хотели, чтобы это было? Если вы не можете понять, как что-то изменить, скажите мне, и я изменю / объясню это для / вас!

 import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.uix.label import Label
from kivy.config import Config
from kivy.uix.button import Button

class Tedegraph(App):
    def build(self): # I will add everything here
        # For your example, it's better to use boxlayout, you don't want a table/grid like pattern, right?
        mainbox = BoxLayout(orientation="horizontal", # Create the main box layout and make it horizontal
                            spacing=15, # Add spacing between widgets
                            padding=5) # And padding on the sides
        mainbox.add_widget(Button(text="Prev", # Add the prev button
                                  font_size="17dp", # set font size
                                  size_hint=(.3, .2), # make the button smaller
                                  pos_hint={"center_x":0.5, # Center it on the x
                                            "center_y":0.5}, # And on the y
                                  on_press=self.prevscreen)) # Attach a button function
        mainbox.add_widget(Image(source='sriyantra.png')) # Add your image after the button
        mainbox.add_widget(Label(text="HELLO")) # And add the text
        mainbox.add_widget(Button(text="Next", # Add the next button and set the same parameters for the next button
                                  font_size="17dp",
                                  size_hint=(.3, .2),
                                  pos_hint={"center_x":0.5,
                                            "center_y":0.5},
                                  on_press=self.nextscreen)) # And change the button press function
        return mainbox


     # I created the functions for you
    def nextscreen(self, *args):
        print("Clicked Next")
        # Here you can write the code that you want to do when the prev button is pressed

    def prevscreen(self, *args):
        print("Clicked Prev")
        # Here you can write the code that you want to do when the next button is pressed

if __name__ == "__main__":
    Tedegraph().run()
  

Комментарии:

1. Пожалуйста, как бы вы разместили небольшой виджет (поле со списком) в нижней части экрана? Я не хочу, чтобы он занимал место справа, что является позицией по умолчанию, я бы хотел привязать его скорее к нижней части. Спасибо.

2. @xralf В этом случае вы можете использовать вертикальную компоновку блока вместо горизонтальной: mainbox = BoxLayout(ориентация = «горизонтальная», интервал = 15, отступ = 5)

Ответ №2:

Я бы использовал макет большой сетки, где я бы разместил меньшие макеты сетки и отрегулировал размер каждого из меньших с помощью size_hint=(width, height)

Если вам нужен пример кода, не могли бы вы добавить фотографию, которую вы используете в коде, чтобы я мог правильно ее запустить?

Комментарии:

1. Спасибо, вот фотография.