[pygtk] Динамическое создание элементов в python

Модератор: Модераторы разделов

Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

[pygtk] Динамическое создание элементов в python

Сообщение Sterh »

Всем доброго времени суток. Есть такая проблема: на форме есть NoteBook с одной вкладкой, на вкладке лежит GtkTextView. Нужно программно добавить еще несколько вкладок с своими GtkTextView.
У меня есть функция которая добавляет к существующему еще один таб с GtkTextView:

Код: Выделить всё

def addTab():
    tab_panel.insert_page(editor,None,1)

editor объявлен выше в не всяких классов и прочего как:

Код: Выделить всё

editor = gtk.TextView()

В итоге вкладки то добавляются, но на каждой вкладке один и тот же GtkTextView. т.е. В одном написал какой-то текст и этот же текст отображается во всех GtkTextView во всех вкладках. Как быть?
Спасибо.
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [pygtk] Динамическое создание элементов в python

Сообщение deadhead »

Так объект GtkTextView у вас, видимо, разделяемый... Создавайте для каждой вкладки свой объект ;-)

Все объекты делятся на ссылочные и атомарные. К атомарным относятся int, long, complex и некоторые другие. При присваивании атомарных объектов копируется их значение, в то время как для ссылочных копируется только указатель на объект, таким образом обе переменные после присваивания используют одно и то же значение. Ссылочные объекты бывают изменяемые и неизменяемые.
Источник
[x] close
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение Sterh »

deadhead писал(а): ↑
08.02.2010 17:43
Так объект GtkTextView у вас, видимо, разделяемый... Создавайте для каждой вкладки свой объект

Спасибо за ответ. Вот я как раз и не пойму как создать textview отдельно для каждой вкладки :unsure:
p.s. И вобще что в gtk использовать для создание табов? Есть еще что кроме Gtk.Notebook?
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение diesel »

Код: Выделить всё

def addTab():
    editor = gtk.TextView()
    tab_panel.insert_page(editor,None,1)

что-то типа такого?
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение Sterh »

diesel писал(а): ↑
09.02.2010 13:46

Код: Выделить всё

def addTab():
    editor = gtk.TextView()
    tab_panel.insert_page(editor,None,1)

что-то типа такого?

Странно... Почему то при взое метода ничего не происходит.
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение diesel »

Sterh писал(а): ↑
09.02.2010 13:59
diesel писал(а): ↑
09.02.2010 13:46

Код: Выделить всё

def addTab():
    editor = gtk.TextView()
    tab_panel.insert_page(editor,None,1)

что-то типа такого?

Странно... Почему то при взое метода ничего не происходит.

покажите какой-нить простенький тестовый пример, так легче будет.
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение Sterh »

diesel писал(а): ↑
09.02.2010 14:37
Sterh писал(а): ↑
09.02.2010 13:59
diesel писал(а): ↑
09.02.2010 13:46

Код: Выделить всё

def addTab():
    editor = gtk.TextView()
    tab_panel.insert_page(editor,None,1)

что-то типа такого?

Странно... Почему то при взое метода ничего не происходит.

покажите какой-нить простенький тестовый пример, так легче будет.


Есть код: Окно на нем мен, статусбар, и по нажатию на меню на форму должен добавляться один таб с расположенным на нем gtk.TextView.

Код: Выделить всё

class Tab:

    def __init__(self):
        self.documents = []
        self.doc_num   = 0

        self.main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.main_window.set_size_request(800,600)
        self.main_window.set_position(gtk.WIN_POS_CENTER)

        self.vbox = gtk.VBox(homogeneous = False, spacing = 0)

        self.init_menu()
        self.initializeEditor()

        self.main_window.add(self.vbox)
        self.main_window.show_all()

    def init_menu(self):
        self.main_menu = gtk.MenuBar()
        self.file_menu = gtk.Menu()
        self.file_item = gtk.MenuItem("File")
        self.file_item.set_submenu(self.file_menu)
        self.file_new = gtk.MenuItem("New")
        self.file_menu.append(self.file_new)
        self.main_menu.append(self.file_item)

        self.file_new.connect("activate",self.new_file)

        self.vbox.pack_start(self.main_menu, False, False, 0)

    def initializeEditor(self):
        self.tab_panel = gtk.Notebook()
        self.statusbar = gtk.Statusbar()
        self.editor    = gtk.TextView()
        self.vbox.add(self.tab_panel)
        self.vbox.pack_start(self.statusbar,False,False,0)

    def new_file(self,widget):
        self.doc_num += 1
        b = len(self.documents)
        self.tab_panel.append_page(self.editor, gtk.Label("ASD"))


После нажатия на меню, ничего не происходит, а появляется Warnings: Can't set a parent on widget which has a parent
Как это можно обойти?
Изображение
Изображение
Мой скромный блог
Спасибо сказали:
Аватара пользователя
Sterh
Сообщения: 42
ОС: Arch Linux, Debian

Re: [pygtk] Динамическое создание элементов в python

Сообщение Sterh »

Все разобрался! Может кому пригодится:

Код: Выделить всё

        def AddTab():
              self.tab_panel.append_page(gtk.TextView(), gtk.Label("aSd"))
              self.main_window.show_all()

Нужно было обновить.

p.s. diesel, deadhead спасибо за потраченное время
Изображение
Изображение
Мой скромный блог
Спасибо сказали: