انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: moshen212 در 16 دی 1387، 01:17 بظ
-
سلام
من میخوام یک نوار ابزار ویژه مثل اونی که داخل برنامه ی Glade هست ایجاد کنم تقریبا ۸۰ ٪ کار هم تمومه فقط مشکل این هست که نمیدنم این شیی که توی تصویر نشون داده شده چه شیئی هست.
من میدونم که شامل مجموعه ای از RadioButtontool هست ولی شیئی که اینها رو در خودش جا داده چی هست مشکلم اینه که هیچ شیئی این ویژه گی رونداره که زمان تغییر اندازه ی تیغه بجای تغییر اندازه ی اشیای درونش مکانشون رو جابجا میکنه البته بجز همین شیی. اصلا این شیی بوسیله ی pygtk پشتیبانی میشه؟
ممنونم دوستان
-
سلام
ببخشید تصویر رو یادم رفت.
-
سلام
همون که بهش میگن toolbox دیگه نه؟ مثل toolbox گیمپ. نمیدونم توی pygtk-doc که خبر ازش نیست!
حالا نمیتونید با همون toolbar کارتون رو راه بندازید؟ مگه چند تا آیکون میخواید بذارید؟
میگردم اگه پیدا کردم بهتون میگم.
-
سلام مجدد
راستش تعدادش تقریبا 8 تایی میشه . ولی چرا من به یاد toolbox نیفتادم خدا می دونه.
خوب بازهم ممنونم ازت راستش همین که اسمش رو هم آوردی خودش کلی کمک بود.
خیلی خیلی گلی , تشکر
-
سلام
مثل اینکه اصلا شی toolbox در pygtk وجود خارجی نداره و برنامه هم خطا میده که یک همچین چیزی وجود نداره
چه کنم؟
-
سلام
شیی WrapBox دقیقا اونی هست که من میخوام ولی مثل اینکه در pygtk تعریف نشده.
-
کدتون رو می شه ببینیم ؟
-
سلام
این هم کد ناقص من:
class MakeGroupToolsByXML:
def __init__(self,label,XMLPath="",itemsize=(24,24),arrow=gtk.ARROW_DOWN):
label=" "+label+" "
self.toolbox=gtk.VBox()
self.buttontool=gtk.Button()
self.buttontool.set_focus_on_click(False)
self.buttontool.connect("clicked",self.show_hide_tool)
self.arrowtool=gtk.Arrow(arrow,gtk.SHADOW_OUT)
hb=gtk.HBox()
lbl=gtk.Label(label)
self.arrow=arrow
hb.pack_start(self.arrowtool,0)
hb.pack_start(lbl,0)
self.buttontool.add(hb)
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
self.cr=gtk.VWrapBox() این خط پشتیبانی نمیشه و خطا داره
self.cr.set_size_request(10,-1)
self.toolbox.pack_start(self.buttontool,0)
self.toolbox.pack_start(self.cr,1,1)
def show_hide_tool(self,widget):
if self.arrow == gtk.ARROW_DOWN:
self.arrowtool.set(gtk.ARROW_RIGHT,gtk.SHADOW_OUT)
self.cr.set_property("visible",False)
self.arrow=gtk.ARROW_RIGHT
elif self.arrow == gtk.ARROW_RIGHT:
self.arrowtool.set(gtk.ARROW_DOWN,gtk.SHADOW_OUT)
self.cr.set_property("visible",True)
self.arrow=gtk.ARROW_DOWN
else:
pass
def add(self,icon=0):
for i in range(20):
optionbutton=gtk.RadioToolButton()
optionbutton.set_label(str(i))
self.cr.add(optionbutton)
-
سلام
مجبور شدم کلاسش رو خودم بنویسم.
import gtk
item=[]
class PaletteBox:
class PaletteBoxItem:
def __init__(self,num,icon,tooltip,size):
self.num=num
self.icon=icon
self.tooltip=tooltip
self.Item=gtk.RadioToolButton()
self.Item.set_size_request(size,size)
def __init__(self,title,items_size = 40):
if items_size > 64 : items_size = 64
if items_size < 16 : items_size = 16
self.rowcount=-1
self.item=[]
self.items_size = items_size
self.button = gtk.Button()
self.button.set_focus_on_click(False)
self.button.connect("clicked",self.hide_show_box)
self.btnbox=gtk.HBox()
self.btnlabel=gtk.Label(" " + title + " ")
self.btnarrow=gtk.Arrow(gtk.ARROW_DOWN,gtk.SHADOW_OUT)
self.btnarrowx = gtk.ARROW_DOWN
self.btnbox.pack_start(self.btnarrow,0,0)
self.btnbox.pack_start(self.btnlabel,0,0)
self.button.add(self.btnbox)
self.hbl = gtk.HBox()
self.itemsbox = gtk.Fixed()
self.itemsbox.set_size_request(items_size, -1)
self.itemsbox.connect("size-allocate",self.redraw_itemsbox)
self.hbl.pack_start(self.itemsbox,1,1)
self.box=gtk.VBox()
self.box.pack_start(self.button,0,0)
self.box.pack_start(self.hbl,1,1)
def hide_show_box(self,widget):
if self.btnarrowx == gtk.ARROW_DOWN:
self.btnarrow.set(gtk.ARROW_RIGHT,gtk.SHADOW_OUT)
self.hbl.set_property("visible",False)
self.btnarrowx=gtk.ARROW_RIGHT
elif self.btnarrowx == gtk.ARROW_RIGHT:
self.btnarrow.set(gtk.ARROW_DOWN,gtk.SHADOW_OUT)
self.hbl.set_property("visible",True)
self.btnarrowx=gtk.ARROW_DOWN
def set_title(self,title):
try:
self.button.set_label(title)
except:
print "PaletteBox.set_title(" + str(title) + ") is not string."
def add_item(self,icon,tooltip,group=None):
index = len(self.item)
self.item.append(self.PaletteBoxItem(index,icon,tooltip,self.items_size))
if(len(self.item) > 1):
print self.item[0].Item
self.item[index].Item.set_group(self.item[0].Item)
else:
self.item[index].Item.set_group(group)
self.item[index].Item.set_label(tooltip)
self.itemsbox.add(self.item[index].Item)
self.redraw_itemsbox(self,self.itemsbox)
def redraw_itemsbox(self,widget,event=0):
width=self.itemsbox.get_allocation()[2]
rowcount=width / self.items_size
if(self.rowcount != rowcount):
if rowcount<1 : rowcount=self.items_size
colcount=len(self.item) / rowcount
extra=len(self.item) % rowcount
itemcounter = 0
for i in range(colcount):
for j in range(rowcount):
self.itemsbox.move(self.item[itemcounter].Item , j * self.items_size , i * self.items_size)
itemcounter += 1
for j in range(extra):
self.itemsbox.move(self.item[itemcounter].Item , j * self.items_size , colcount * self.items_size)
itemcounter += 1
self.rowcount = rowcount
w = gtk.Window()
w.set_size_request(500,500)
w.connect("destroy",gtk.main_quit)
p = gtk.HPaned()
group=pb1=PaletteBox("First Test")
pb1.add_item("1", "A")
pb1.add_item("2", "B")
pb1.add_item("3", "C")
pb1.add_item("4", "D")
pb1.add_item("5", "E")
pb1.add_item("6", "F")
pb1.add_item("7", "G")
pb1.add_item("8", "H")
pb1.add_item("9", "I")
pb1.add_item("10", "J")
pb2=PaletteBox("Last Test")
pb2.add_item("1", "A",pb1.item[0].Item)
pb2.add_item("2", "B",pb1.item[0].Item)
pb2.add_item("3", "C",pb1.item[0].Item)
pb2.add_item("4", "D",pb1.item[0].Item)
pb2.add_item("5", "E",pb1.item[0].Item)
pb2.add_item("6", "F",pb1.item[0].Item)
pb2.add_item("7", "G",pb1.item[0].Item)
pb2.add_item("8", "H",pb1.item[0].Item)
pb2.add_item("9", "I",pb1.item[0].Item)
pb2.add_item("10", "J",pb1.item[0].Item)
vbb=gtk.VBox()
vbb.pack_start(pb1.box,0)
vbb.pack_start(pb2.box,0)
p.pack1(vbb,0,0)
v=gtk.VBox()
v.add(p)
l=gtk.Layout()
p.pack2(l)
w.add(v)
w.show_all()
gtk.main()
-
سلام
مجبور شدم کلاسش رو خودم بنویسم.
....
سلام
ایول بابا خیلی باحالی! ;D
خسته نباشی. از ارادهت خوشم اومد! :D
میگم پیشنهاد بده کدت رو به pygtk اضافه کنن.
http://pygtk.org/
راستی میتونم ازش تحت GPLv3 استفاده کنم دیگه نه؟
البته پیشنهاد میکنم تحت LGPL قرارش بدی(مثل خود GTK). اون وقت میشه ازش تحت GPL هم استفاده کرد.
اینجا هم میتونی بذاری کدت رو:
http://code.activestate.com/recipes/
چون چیز به درد بخوری هست. شاید به درد یکی خورد
موفق باشی
-
سلام
خواهش می کنم نظر لطفت هست.
میگم کدم رو داخل ActiveState گذاشتم ولی اینقدر زبان انگلیسیم یاری نمیکنه که به پیشنهاد بدم به pygtk اضافش کنن.
راستی میتونم ازش تحت GPLv3 استفاده کنم دیگه نه؟
البته پیشنهاد میکنم تحت LGPL قرارش بدی(مثل خود GTK). اون وقت میشه ازش تحت GPL هم استفاده کرد.
بله, استفاده از این کد بلامانع هست.
میشه بگی فرق GPL با LGPL چیه؟
-
بله, استفاده از این کد بلامانع هست.
میشه بگی فرق GPL با LGPL چیه؟
GPL سختگیرتر هست و بهش میگن Strong Copyleft
اما LGPL یه مقدار سهلانگار هست و میگن Week Copyleft
مثلاً GPL اجازه نمیده که برنامهٔ تحت این مجوز، بصورت ترکیبی با برنامهٔ غیرآزاد استفاده بشه. نه تنها از کدش نمیشه استفادهٔ غیرآزاد کرد، نمیشه اون رو با برنامهٔ غیرآزاد لینک کرد. یعنی اگه یه کتابخونه(library) تحت GPL باشه، فقط برنامههای آزاد میتونن از این کتابخونه استفاده کنن، اون هم مجوزشون باید GPL Compatible باشه (مثلاً GPL باشه یاLGPL یاPython License یا...). لیستشون رو میتونی اینجا ببینی:
LGPL بیشتر برای متابخانههای آزاد استفاده میشه، چون به برنامههای غیرآزاد(و غیر اوپنسورس) اجازه میده از این کتابخانه استفاده کنن. مثلاً میشه برنامهٔ غیراوپنسورسی نوشت که رابط گرافیکیش بر اساس GTK هست(چون GTK تحت LGPL هست نه GPL)
لیست مجوزها رو میتونی اینجا ببینی.
http://www.gnu.org/philosophy/license-list.html
وقت کردی توضیحاتشون رو هم بخون.
برای پی بردن به تفاوت GPLv2 و GPLv3 هم این ترجمه کنفرانس استالمن رو بخونی خیلی عالیه:
http://www.technotux.org/html/PNphpBB2-viewtopic-t-16635.html