Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » pygtk, создание кнопок, и их удаление [RSS Feed]

#1 Июль 24, 2009 12:39:32

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

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

Это можно представить как окно содержащее 2 кнопка “Добавить” и “Удалить” и EditBox в который пишется название кнопки.
По нажатию кнопки “Добавить” создается кнопка с названием указанным в Edit
По нажатию кнопки “Удалить” удаляетя кнопка с названием указанным в Edit.
С помощью pygtk я могу “нарисовать” кнопку в HBox() с помошью следующего кода:

self.container = gtk.HBox()
self.button = gtk.Button("Button1")
self.container.add(self.button)
self.button.show()
self.container.show()
напсав этот код еще раз, я создам еще одну кнопку,
self.button = gtk.Button("Button2")
self.container.add(self.button)
self.button.show()
self.container.show()
но как мне потом удалить какую либо кнопку с названием например “Button1”.

Я думаю, что можно создать класс CreateButton который должен содержать параметр name(можно и еще какиенибудь нампимер длина, иконка и т.д), и при вызове(незнаю как это правильно назвать) его, и передачей ему name создастся кнопка.

Но вот как реализавать удаление, я не могу представить.

Кнопки должны удалятся не только с конца, но и гденить в середине. Вобщем удаление ее должно происходить по ее имени.

Тут примерно описывается, что я хочу получить:
http://python.su/forum/viewtopic.php?id=4823



Офлайн

#2 Июль 24, 2009 14:21:26

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

помести кнопки в список, и рули элементами списка



Офлайн

#3 Июль 24, 2009 14:34:02

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

pasaranax
Пример можно?



Офлайн

#4 Июль 25, 2009 10:53:15

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

D_Darth
Если правильно понял, то следующий код - примерно то, что вам нужно.
Последовательнось действий: в поле self.entry вводите название создаваемой кнопки, нажимаете Enter, далее Добавить - кнопка создается. Для удаления соотвественно - вводите название удаляемой кнопки, опять Enter,Удалить - кнопка удаляется. Код писался на скорую руку, за шероховатости (global, exec, отсутствие обработки ошибок) прошу извинить. Удачи :)

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

entry_text='blablabla'
class Buttons:
def add_button(self,widget):
exec 'self.'+entry_text+' = gtk.Button()'
exec 'self.'+entry_text+'.set_label('+'entry_text'+')'
exec 'self.container.add(self.'+entry_text+')'
exec 'self.'+entry_text+'.show()'
self.container.show()

def delete_button(self, widget):
exec 'self.'+entry_text+'.destroy()'

def enter_callback(self, widget, entry):
global entry_text
entry_text = entry.get_text()
print 'in enter_callback', entry_text

def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", lambda wid: gtk.main_quit())
self.container = gtk.VBox()

self.button_add = gtk.Button( stock=gtk.STOCK_ADD)
self.container.add(self.button_add)
self.button_add.show()
self.container.show()

self.button_delete = gtk.Button( stock=gtk.STOCK_DELETE)
self.container.add(self.button_delete)
self.button_delete.show()
self.container.show()

self.entry=gtk.Entry()
self.entry.connect("activate", self.enter_callback, self.entry)
self.container.add(self.entry)
self.entry.show()
self.container.show()

self.button_add.connect("clicked", self.add_button)
self.button_delete.connect("clicked", self.delete_button)

self.window.add(self.container)
self.window.show()
Buttons()
gtk.main()



Офлайн

#5 Июль 25, 2009 16:43:07

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

D_Darth
pasaranax
Пример можно?
Кажется, я ошибся, я гтк не знаю, видимо с гткшным методом работы с элементами так не получится.



Офлайн

#6 Июль 28, 2009 08:47:37

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

gmorgunov
Спасибо большое. Бегло посмотрел, и по моему как раз то, что мне надо



Офлайн

#7 Июль 28, 2009 10:56:05

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

Теперь возник другой вопрос. мне нужно заменить gtk.Button на gtk.HBox внутри которого находится gtk.Image вместе с gtk.Label. Тоесть мне нужно создать класс(я его представляю таким):

class myButton():
def __init__(self):
self.path_icon = ""
self.button = gtk.HBox()
self.icon = gtk.Image()
self.icon.set_from_file(self.path_icon)
self.icon.show()
self.button.add(self.icon)
self.label = gtk.Label()
self.label.show()
self.button.add(self.label)
Но после того как я его вызываю и добовляю к gtk.EventBox
        self.container = gtk.HBox()
self.evbox = gtk.EventBox()
self.evbox.connect("button-press-event",self.click)
self.container.add(self.evbox)
self.button = myButton()
self.evbox.add(self.button)
Пишет:
TypeError: GtkContainer.add() argument 1 must be gtk.Widget, not instance

Я только что познаю азы питона, и поэтому не могу понять в чем проблемма. знаю, что решение очень даже пустиковое.
Также прошу описать как мне потом можно менять свойства обьектов класса, например self.icon.set_from_file



Отредактировано (Июль 28, 2009 11:13:41)

Офлайн

#8 Июль 31, 2009 12:11:48

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

Всем спасибо. сам разобрался. Выкладываю мой класс. Мож комунить пригодится.

class myButton(gtk.HBox):
def __init__(self):
gtk.HBox.__init__(self)
self.textlabel = "Labellabel"
self.iconpath = "/usr/share/pixmaps/firefox-3.0.png"

self.icon = gtk.Image()
self.icon.set_from_file(self.iconpath)
self.icon.show()
self.pack_start(self.icon)

self.label = gtk.Label(self.textlabel)
self.label.show()
self.pack_start(self.label)



Офлайн

#9 Июль 31, 2009 12:48:12

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

def add_button(self,widget):
exec 'self.'+entry_text+' = gtk.Button()'
exec 'self.'+entry_text+'.set_label('+'entry_text'+')'
exec 'self.container.add(self.'+entry_text+')'
exec 'self.'+entry_text+'.show()'
def add_button(self,widget):
button = gtk.Button()
self.container.add(button)
button.set_label(entry_text)
button.show()
setattr(self, entry_text, button)
не лучше без exec ?



Офлайн

#10 Авг. 1, 2009 07:40:42

D_Darth
От:
Зарегистрирован: 2009-07-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

pygtk, создание кнопок, и их удаление

bazooka
def add_button(self,widget):
exec 'self.'+entry_text+' = gtk.Button()'
exec 'self.'+entry_text+'.set_label('+'entry_text'+')'
exec 'self.container.add(self.'+entry_text+')'
exec 'self.'+entry_text+'.show()'
def add_button(self,widget):
button = gtk.Button()
self.container.add(button)
button.set_label(entry_text)
button.show()
setattr(self, entry_text, button)
не лучше без exec ?
дак вродь и так я написал без exec



Офлайн

  • Начало
  • » GUI
  • » pygtk, создание кнопок, и их удаление[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version