Создайте простое приложение с вкладками (многостраничное) с помощью Python и GTK.

Я надеюсь, что кто-то может мне помочь.

Моя цель

  • создание простого многостраничного приложения GTK с помощью python
  • страницы должны переключаться с помощью боковой панели или верхней панели
  • каждая страница должна содержать несколько элементов (например, несколько кнопок, меток и т. д.), расположенных в виде сетки или чего-то подобного.

Мой код на данный момент (некоторые копии и вставки из бесплатных источников и некоторые модификации)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class StackSidebar(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="application title")
        self.set_default_size(900, 600)
        self.connect("destroy", Gtk.main_quit)

        grid = Gtk.Grid()
        self.add(grid)

        stack = Gtk.Stack()
        stack.set_hexpand(True)
        stack.set_vexpand(True)
        grid.attach(stack, 1, 0, 1, 1)

        stacksidebar = Gtk.StackSidebar()
        stacksidebar.set_stack(stack)
        grid.attach(stacksidebar, 0, 0, 1, 1)

        label = Gtk.Label("label 1 text inside")
        name = "label1"
        title = "label 1 name"
        stack.add_titled(label, name, title)

        label = Gtk.Label("label 2 text inside")
        name = "label2"
        title = "label 2 name"
        stack.add_titled(label, name, title)

        label = Gtk.Label("label 3 text inside")
        name = "label3"
        title = "label 3 name"
        stack.add_titled(label, name, title)

window = StackSidebar()
window.set_wmclass ("application title", "application title")
window.show_all()

Gtk.main()

Результат

Нажмите на ссылку, чтобы увидеть работающее приложение

Проблема

Я могу видеть/создавать только одну метку на каждой странице. См. label = Gtk.Label("label 1 text inside"). Как уже говорилось ранее, я хотел бы расположить несколько кнопок и т. д., но не знаю, с чего начать.

Не могли бы вы помочь? Это вообще возможно? Подходит ли мой подход или мне следует использовать что-то вроде GtkNotebook? Заранее спасибо.


person christian2812    schedule 12.06.2017    source источник
comment
Вам нужно поместить свои ярлыки, кнопки и т. д. в контейнер макета, например Ящик или Таблица.   -  person PM 2Ring    schedule 13.06.2017
comment
как сказал @PM2Ring, вам нужно использовать контейнерные виджеты для компоновки пользовательского интерфейса. Попробуйте Glade и поэкспериментируйте с виджетами, чтобы понять, как создавать пользовательские интерфейсы.   -  person José Fonte    schedule 13.06.2017
comment
Таблица @PM2Ring больше не применима в GTK+ 3; вместо этого используйте сетку.   -  person andlabs    schedule 13.06.2017
comment
Спасибо @andlabs. Я не использовал GTK в последнее время, и я никогда не использовал GTK3...   -  person PM 2Ring    schedule 13.06.2017


Ответы (1)


Спасибо за вашу помощь. Я посмотрел на GtkGrid, и он работает очень хорошо.

Это мое решение (фрагмент)

# See initial post for previous code

grid2 = Gtk.Grid()

button1 = Gtk.Button(label="Button 1")
label1 = Gtk.Label("This is a test label")
button3 = Gtk.Button(label="Button 3")
button4 = Gtk.Button(label="Button 4")
button5 = Gtk.Button(label="Button 5")
button6 = Gtk.Button(label="Button 6")

grid2.add(button1)
grid2.attach(label1, 1, 0, 2, 1)
grid2.attach_next_to(button3, button1, Gtk.PositionType.BOTTOM, 1, 2)
grid2.attach_next_to(button4, button3, Gtk.PositionType.RIGHT, 2, 1)
grid2.attach(button5, 1, 2, 1, 1)
grid2.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1)

name = "page3"
title = "page3-title"
stack.add_titled(grid2, name, title)

# See initial post for next code

Результат

Нажмите на ссылку, чтобы увидеть работающее приложение

person christian2812    schedule 13.06.2017