0

だから私は3つの部門を持つhboxを持っているウィンドウを持っています。2番目のvboxには、2つの分割があるvboxがあり、このvbox内には、それぞれのツリービューを持つ2つのスクロールウィンドウがあります。

私のコードでは、3番目のhboxセパレーターに[次へ]ボタンがあります。クリックした後、2つのスクロールウィンドウを破棄し、彼のListStoreで新しいTreeviewを作成し、2つのスクロールウィンドウがあったvboxにpack_startと言いますが、何も表示されず、1番目と3番目のhboxセパレーターだけが表示されます。

これは私のコードです:(新しいTreeViewを作成しようとする場所は最後の関数にあります)

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()

その最後の行の後で、「treeview_timezone.show()」のようなことをすると、ブルースクリーンが表示されます

ありがとう

4

1 に答える 1

1

解決しました

これが私のtimezone_window関数の現在の状態です

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()
于 2012-07-27T14:19:58.900 に答える