codiaf
codiaf

Reputation: 629

Show a TreeView inside a Box after destroy what was inside of that Box (GTK+)

so I have a window in which I have a hbox with 3 divisions. In the second one I have a vbox with 2 divisions and inside this vbox I have 2 scrolledwindow with his respective treeview.

In my code I have a Next button in the third hbox separator. After clicked, I destroy the 2 scrolledwindows and I create a new Treeview with his ListStore and say to pack_start to the vbox in which I had the 2 scrolled windows, but nothing shows, just the first and third hbox separators.

This is my code: (where I try to make the new TreeView is in the last function)

import xml.etree.ElementTree as etree
import gi
from gi.repository import Gtk

present_step = 0

locale_selected = ''
keymap_selected = ''

class main():


def __init__(self):

    builder = Gtk.Builder()
    builder.add_from_file("cnchi.ui")



    self.window = builder.get_object("mainwindow")
    self.header_label = builder.get_object("label_action")
    self.progressbar = builder.get_object("progressbar1")
    self.forward_button = builder.get_object("forward_button")
    self.box = builder.get_object("box1")
    self.main_info_box = builder.get_object("box2")
    self.scrolleft = builder.get_object("scrolledwindow1")
    self.scrolright = builder.get_object("scrolledwindow2")
    self.treeview_language = builder.get_object("treeview1")
    self.treeview_keymap = builder.get_object("treeview2")



    self.window.connect("delete-event", Gtk.main_quit)
    builder.connect_signals(self)
    self.window.set_title('Cinnarch Installer')
    self.window.set_position(Gtk.WindowPosition.CENTER)


    self.set_languages_list()
    self.set_keymaps_list()


    self.window.show_all()


def set_languages_list(self):
    tree = etree.parse("locales.xml")
    root = tree.getroot()

    liststore_language = Gtk.ListStore(str)

    render = Gtk.CellRendererText()
    col_languages = Gtk.TreeViewColumn("Languages",render,text=0)
    self.treeview_language.set_model(liststore_language)
    self.treeview_language.append_column(col_languages)

    for child in root:
        liststore_language.append([child.find('language_name').text])


def set_keymaps_list(self):
    tree = etree.parse("keymaps.xml")
    root = tree.getroot()

    liststore_keymap = Gtk.ListStore(str)

    render = Gtk.CellRendererText()
    col_keymaps = Gtk.TreeViewColumn("Keymaps",render,text=0)
    self.treeview_keymap.set_model(liststore_keymap)
    self.treeview_keymap.append_column(col_keymaps)

    for child in root:
        liststore_keymap.append([child.find('language_name').text])


def on_forward_button_clicked(self, widget, data=None):
    new_value = self.progressbar.get_fraction() + 0.1
    global present_step

    if new_value > 1:
        new_value = 0

    self.progressbar.set_fraction(new_value)


    if present_step == 0:
        self.get_language_value()
        self.get_keymap_value()
        self.scrolleft.destroy()
        self.scrolright.destroy()
        # self.firstbox.destroy()
        self.timezone_window()

    elif present_step == 1:
        self.main_info_box.show()

    present_step = present_step + 1


def get_language_value(self):
    global locale_selected
    selected = self.treeview_language.get_selection()

    (ls, iter) = selected.get_selected()
    language = ls.get_value(iter,0)

    tree = etree.parse("locales.xml")
    root = tree.getroot()

    for child in root:
        if child.find('language_name').text == language:
            locale_selected = child.find('locale_name').text

def get_keymap_value(self):
    global keymap_selected
    selected = self.treeview_keymap.get_selection()

    (ls, iter) = selected.get_selected()

    keymap = ls.get_value(iter,0)

    tree = etree.parse("keymaps.xml")
    root = tree.getroot()

    for child in root:
        if child.find('language_name').text == keymap:
            keymap_selected = child.find('keymap_name').text

def timezone_window(self):
    tree = etree.parse("timezones.xml")
    root = tree.getroot()

    self.header_label.set_text("Configure your Timezone")


    liststore_timezone = Gtk.ListStore(str)

    render = Gtk.CellRendererText()
    col_timezones = Gtk.TreeViewColumn("Timezones",render,text=0)

    treeview_timezone = Gtk.TreeView(liststore_timezone)

    treeview_timezone.set_model(liststore_timezone)
    treeview_timezone.append_column(col_timezones)

    for child in root:
        liststore_timezone.append([child.find('timezone_name').text])


    self.main_info_box.pack_start(treeview_timezone,True,True,0)


if __name__ == '__main__':
    main()
    Gtk.main()

after that last line, if I do something like "treeview_timezone.show()" a blue screen is shown

Thanks

Upvotes: 0

Views: 194

Answers (1)

codiaf
codiaf

Reputation: 629

Solved

This is how my timezone_window function is now

def timezone_window(self):
    tree = etree.parse("timezones.xml")
    root = tree.getroot()

    self.header_label.set_text("Configure your Timezone")


    scrolledwindow = Gtk.ScrolledWindow()
    scrolledwindow.set_vexpand(True)


    liststore_timezone = Gtk.ListStore(str)

    render = Gtk.CellRendererText()
    col_timezones = Gtk.TreeViewColumn("Timezones",render,text=0)

    treeview_timezone = Gtk.TreeView(liststore_timezone)

    treeview_timezone.set_model(liststore_timezone)
    treeview_timezone.append_column(col_timezones)

    for child in root:
        liststore_timezone.append([child.find('timezone_name').text])

    scrolledwindow.add(treeview_timezone)
    self.main_info_box.pack_start(scrolledwindow, False, False, 0)
    treeview_timezone.show()
    scrolledwindow.show()

Upvotes: 1

Related Questions