Я делаю небольшую программу на Python/Gtk4. Компоновка относительно проста: есть верхняя зона с входами и кнопкой «добавить», затем ColumnView, отображающий добавленные элементы, и, наконец, ряд кнопок для выполнения операций над элементами. Я бы хотел, чтобы кнопки всегда находились в нижней части окна, независимо от размера окна и среднего ColumnView.
Я пытался использовать set_valign(Gtk.Align.FILL) для ComumnView и прокручиваемого окна, которое его содержит, и использовать set_valign(Gtk.Align.END) для горизонтального блока, содержащего кнопки, но set_valign, похоже, не работает иметь какой-либо эффект.
Вот как это сейчас выглядит для небольшой демо-версии:
как это выглядит сейчас
И вот как это должно выглядеть:
как это должно выглядеть
Вот код для урезанной демо-версии, в которой наблюдается та же проблема:
#!/usr/bin/python3
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk, Gio, GObject, GLib
class TestItem(GObject.Object):
__gtype_name__ = "TestItem"
name = GObject.Property(type=str)
value = GObject.Property(type=int)
def __init__(self, name: str, value: int):
super().__init__()
self.name = name
self.value = value
def make_table_column(title, field):
"""
Make a column for a field
"""
template = b"""
GtkListItem
""" % (field.encode('ascii'),)
template = GLib.Bytes.new(template)
factory = Gtk.BuilderListItemFactory.new_from_bytes(None, template)
col = Gtk.ColumnViewColumn(title = title, factory = factory,
resizable = True)
return col
class Test(Gtk.ApplicationWindow):
def __init__(self, **kargs):
super().__init__(**kargs, title="Test")
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
control = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
control.append(Gtk.Label(label = "Name:"))
self.name = Gtk.Entry()
control.append(self.name)
control.append(Gtk.Label(label = "Value:"))
self.value = Gtk.SpinButton.new_with_range(1, 100, 1)
control.append(self.value)
button = Gtk.Button.new_from_icon_name('list-add')
button.connect("clicked", self.add)
control.append(button)
vbox.append(control)
self.model = Gio.ListStore(item_type = TestItem)
view = Gtk.ColumnView()
self.selection = Gtk.NoSelection(model = self.model)
view.set_model(self.selection)
view.append_column(make_table_column("Item name", 'name'))
view.append_column(make_table_column("Value", 'value'))
scroll = Gtk.ScrolledWindow()
scroll.set_child(view)
scroll.set_propagate_natural_width(True)
scroll.set_propagate_natural_height(True)
scroll.set_valign(Gtk.Align.FILL)
vbox.append(scroll)
buttons = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
buttons.set_valign(Gtk.Align.END)
clear = Gtk.Button.new_from_icon_name('edit-clear')
clear.connect("clicked", self.clear)
clear = Gtk.Button.new_from_icon_name('list-add')
clear.connect("clicked", self.increase)
buttons.append(clear)
vbox.append(buttons)
vbox.set_valign(Gtk.Align.FILL)
self.set_child(vbox)
self.set_default_size(600, 400)
def add(self, _widget):
name = self.name.get_buffer().get_text()
value = int(self.value.get_value())
item = TestItem(name, value)
self.model.insert(0, item)
def increase(self, _widget):
for item in self.model:
item.value += 1
def clear(self, _widget):
self.model.remove_all()
def on_activate(app):
win = Test(application=app)
win.present()
app = Gtk.Application(application_id='org.kilobug.test')
app.connect('activate', on_activate)
app.run(None)
Подробнее здесь: https://stackoverflow.com/questions/798 ... rtical-box
Принудительное размещение виджета внизу вертикального поля ⇐ Python
Программы на Python
-
Anonymous
1772461765
Anonymous
Я делаю небольшую программу на Python/Gtk4. Компоновка относительно проста: есть верхняя зона с входами и кнопкой «добавить», затем ColumnView, отображающий добавленные элементы, и, наконец, ряд кнопок для выполнения операций над элементами. Я бы хотел, чтобы кнопки всегда находились в нижней части окна, независимо от размера окна и среднего ColumnView.
Я пытался использовать set_valign(Gtk.Align.FILL) для ComumnView и прокручиваемого окна, которое его содержит, и использовать set_valign(Gtk.Align.END) для горизонтального блока, содержащего кнопки, но set_valign, похоже, не работает иметь какой-либо эффект.
Вот как это сейчас выглядит для небольшой демо-версии:
как это выглядит сейчас
И вот как это должно выглядеть:
как это должно выглядеть
Вот код для урезанной демо-версии, в которой наблюдается та же проблема:
#!/usr/bin/python3
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk, Gio, GObject, GLib
class TestItem(GObject.Object):
__gtype_name__ = "TestItem"
name = GObject.Property(type=str)
value = GObject.Property(type=int)
def __init__(self, name: str, value: int):
super().__init__()
self.name = name
self.value = value
def make_table_column(title, field):
"""
Make a column for a field
"""
template = b"""
GtkListItem
""" % (field.encode('ascii'),)
template = GLib.Bytes.new(template)
factory = Gtk.BuilderListItemFactory.new_from_bytes(None, template)
col = Gtk.ColumnViewColumn(title = title, factory = factory,
resizable = True)
return col
class Test(Gtk.ApplicationWindow):
def __init__(self, **kargs):
super().__init__(**kargs, title="Test")
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
control = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
control.append(Gtk.Label(label = "Name:"))
self.name = Gtk.Entry()
control.append(self.name)
control.append(Gtk.Label(label = "Value:"))
self.value = Gtk.SpinButton.new_with_range(1, 100, 1)
control.append(self.value)
button = Gtk.Button.new_from_icon_name('list-add')
button.connect("clicked", self.add)
control.append(button)
vbox.append(control)
self.model = Gio.ListStore(item_type = TestItem)
view = Gtk.ColumnView()
self.selection = Gtk.NoSelection(model = self.model)
view.set_model(self.selection)
view.append_column(make_table_column("Item name", 'name'))
view.append_column(make_table_column("Value", 'value'))
scroll = Gtk.ScrolledWindow()
scroll.set_child(view)
scroll.set_propagate_natural_width(True)
scroll.set_propagate_natural_height(True)
scroll.set_valign(Gtk.Align.FILL)
vbox.append(scroll)
buttons = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
buttons.set_valign(Gtk.Align.END)
clear = Gtk.Button.new_from_icon_name('edit-clear')
clear.connect("clicked", self.clear)
clear = Gtk.Button.new_from_icon_name('list-add')
clear.connect("clicked", self.increase)
buttons.append(clear)
vbox.append(buttons)
vbox.set_valign(Gtk.Align.FILL)
self.set_child(vbox)
self.set_default_size(600, 400)
def add(self, _widget):
name = self.name.get_buffer().get_text()
value = int(self.value.get_value())
item = TestItem(name, value)
self.model.insert(0, item)
def increase(self, _widget):
for item in self.model:
item.value += 1
def clear(self, _widget):
self.model.remove_all()
def on_activate(app):
win = Test(application=app)
win.present()
app = Gtk.Application(application_id='org.kilobug.test')
app.connect('activate', on_activate)
app.run(None)
Подробнее здесь: [url]https://stackoverflow.com/questions/79899362/forcing-widget-to-the-bottom-of-a-vertical-box[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия