انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: moshen212 در 16 دی 1387، 01:17 ب‌ظ

عنوان: کمک برای ساخت یک palette در python (حل شد)
ارسال شده توسط: moshen212 در 16 دی 1387، 01:17 ب‌ظ
سلام
من میخوام یک نوار ابزار ویژه مثل اونی که داخل برنامه ی Glade هست ایجاد کنم تقریبا ۸۰ ٪ کار هم تمومه فقط مشکل این هست که نمیدنم این شیی که توی تصویر نشون داده شده چه شیئی هست.
من میدونم که شامل مجموعه ای از RadioButtontool هست ولی شیئی که اینها رو در خودش جا داده چی هست مشکلم اینه که هیچ شیئی این ویژه گی رونداره که زمان تغییر اندازه ی تیغه بجای تغییر اندازه ی اشیای درونش مکانشون رو جابجا میکنه البته بجز همین شیی. اصلا این شیی بوسیله ی pygtk پشتیبانی میشه؟
ممنونم دوستان
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 16 دی 1387، 01:30 ب‌ظ
سلام
ببخشید تصویر رو یادم رفت.
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: سعید رسولی در 16 دی 1387، 04:35 ب‌ظ
سلام
همون که بهش میگن toolbox دیگه نه؟ مثل toolbox گیمپ. نمی‌دونم توی pygtk-doc که خبر ازش نیست!
حالا نمی‌تونید با همون toolbar کارتون رو راه بندازید؟ مگه چند تا آیکون می‌خواید بذارید؟

می‌گردم اگه پیدا کردم بهتون میگم.
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 16 دی 1387، 11:37 ب‌ظ
سلام مجدد
راستش تعدادش تقریبا 8 تایی میشه . ولی چرا من به یاد toolbox نیفتادم خدا می دونه.
خوب بازهم ممنونم ازت راستش همین که اسمش رو هم آوردی خودش کلی کمک بود.
خیلی خیلی گلی , تشکر
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 17 دی 1387، 12:02 ق‌ظ
سلام
مثل اینکه اصلا شی toolbox در pygtk وجود خارجی نداره و برنامه هم خطا میده که یک همچین چیزی وجود نداره
چه کنم؟
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 19 دی 1387، 09:56 ق‌ظ
سلام
شیی WrapBox دقیقا اونی هست که من میخوام ولی مثل اینکه در pygtk تعریف نشده.
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: مهدی پیشگوی در 21 دی 1387، 09:59 ق‌ظ
کدتون رو می شه ببینیم ؟
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 22 دی 1387، 09:27 ق‌ظ
سلام
این هم کد ناقص من:
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)
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: moshen212 در 24 دی 1387، 09:59 ق‌ظ
سلام
مجبور شدم کلاسش رو خودم بنویسم.

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()
عنوان: پاسخ به: کمک در برای ساخت یک palette در python
ارسال شده توسط: سعید رسولی در 24 دی 1387، 03:23 ب‌ظ
سلام
مجبور شدم کلاسش رو خودم بنویسم.
....
سلام
ایول بابا خیلی باحالی! ;D
خسته نباشی. از اراده‌ت خوشم اومد! :D

میگم پیشنهاد بده کدت رو به pygtk اضافه کنن.
http://pygtk.org/

راستی می‌تونم ازش تحت GPLv3 استفاده کنم دیگه نه؟
البته پیشنهاد می‌کنم تحت LGPL قرارش بدی(مثل خود GTK). اون وقت میشه ازش تحت GPL هم استفاده کرد.

اینجا هم می‌تونی بذاری کدت رو:
http://code.activestate.com/recipes/
چون چیز به درد بخوری هست. شاید به درد یکی خورد

موفق باشی
عنوان: پاسخ به: کمک برای ساخت یک palette در python (حل شد)
ارسال شده توسط: moshen212 در 25 دی 1387، 10:05 ق‌ظ
سلام
خواهش می کنم نظر لطفت هست.
میگم کدم رو داخل ActiveState گذاشتم ولی اینقدر زبان انگلیسیم یاری نمیکنه که به پیشنهاد بدم به pygtk اضافش کنن.
نقل‌قول
راستی می‌تونم ازش تحت GPLv3 استفاده کنم دیگه نه؟
البته پیشنهاد می‌کنم تحت LGPL قرارش بدی(مثل خود GTK). اون وقت میشه ازش تحت GPL هم استفاده کرد.
بله, استفاده از این کد بلامانع هست.
میشه بگی فرق GPL با LGPL چیه؟
عنوان: پاسخ به: کمک برای ساخت یک palette در python (حل شد)
ارسال شده توسط: سعید رسولی در 25 دی 1387، 01:49 ب‌ظ
بله, استفاده از این کد بلامانع هست.
میشه بگی فرق 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