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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: کمک برای ساخت یک palette در python (حل شد)  (دفعات بازدید: 4372 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
سلام
من میخوام یک نوار ابزار ویژه مثل اونی که داخل برنامه ی Glade هست ایجاد کنم تقریبا ۸۰ ٪ کار هم تمومه فقط مشکل این هست که نمیدنم این شیی که توی تصویر نشون داده شده چه شیئی هست.
من میدونم که شامل مجموعه ای از RadioButtontool هست ولی شیئی که اینها رو در خودش جا داده چی هست مشکلم اینه که هیچ شیئی این ویژه گی رونداره که زمان تغییر اندازه ی تیغه بجای تغییر اندازه ی اشیای درونش مکانشون رو جابجا میکنه البته بجز همین شیی. اصلا این شیی بوسیله ی pygtk پشتیبانی میشه؟
ممنونم دوستان
« آخرین ویرایش: 24 دی 1387، 10:01 ق‌ظ توسط moshen212 »

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #1 : 16 دی 1387، 01:30 ب‌ظ »
سلام
ببخشید تصویر رو یادم رفت.

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #2 : 16 دی 1387، 04:35 ب‌ظ »
سلام
همون که بهش میگن toolbox دیگه نه؟ مثل toolbox گیمپ. نمی‌دونم توی pygtk-doc که خبر ازش نیست!
حالا نمی‌تونید با همون toolbar کارتون رو راه بندازید؟ مگه چند تا آیکون می‌خواید بذارید؟

می‌گردم اگه پیدا کردم بهتون میگم.
« آخرین ویرایش: 16 دی 1387، 04:38 ب‌ظ توسط ilius »

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #3 : 16 دی 1387، 11:37 ب‌ظ »
سلام مجدد
راستش تعدادش تقریبا 8 تایی میشه . ولی چرا من به یاد toolbox نیفتادم خدا می دونه.
خوب بازهم ممنونم ازت راستش همین که اسمش رو هم آوردی خودش کلی کمک بود.
خیلی خیلی گلی , تشکر

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #4 : 17 دی 1387، 12:02 ق‌ظ »
سلام
مثل اینکه اصلا شی toolbox در pygtk وجود خارجی نداره و برنامه هم خطا میده که یک همچین چیزی وجود نداره
چه کنم؟

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #5 : 19 دی 1387، 09:56 ق‌ظ »
سلام
شیی WrapBox دقیقا اونی هست که من میخوام ولی مثل اینکه در pygtk تعریف نشده.

آفلاین مهدی پیشگوی

  • High Hero Member
  • *
  • ارسال: 3100
  • جنسیت : پسر
  • لينوكس يعني آزادي ، امنيت
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #6 : 21 دی 1387، 09:59 ق‌ظ »
کدتون رو می شه ببینیم ؟

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #7 : 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)

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #8 : 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()

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: کمک در برای ساخت یک palette در python
« پاسخ #9 : 24 دی 1387، 03:23 ب‌ظ »
سلام
مجبور شدم کلاسش رو خودم بنویسم.
....
سلام
ایول بابا خیلی باحالی! ;D
خسته نباشی. از اراده‌ت خوشم اومد! :D

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

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

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

موفق باشی
« آخرین ویرایش: 24 دی 1387، 03:29 ب‌ظ توسط ilius »

آفلاین moshen212

  • Sr. Member
  • *
  • ارسال: 344
  • جنسیت : پسر
پاسخ به: کمک برای ساخت یک palette در python (حل شد)
« پاسخ #10 : 25 دی 1387، 10:05 ق‌ظ »
سلام
خواهش می کنم نظر لطفت هست.
میگم کدم رو داخل ActiveState گذاشتم ولی اینقدر زبان انگلیسیم یاری نمیکنه که به پیشنهاد بدم به pygtk اضافش کنن.
نقل‌قول
راستی می‌تونم ازش تحت GPLv3 استفاده کنم دیگه نه؟
البته پیشنهاد می‌کنم تحت LGPL قرارش بدی(مثل خود GTK). اون وقت میشه ازش تحت GPL هم استفاده کرد.
بله, استفاده از این کد بلامانع هست.
میشه بگی فرق GPL با LGPL چیه؟

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: کمک برای ساخت یک palette در python (حل شد)
« پاسخ #11 : 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