Kısayol Oluşturucu [UGT]

Başlatan sem, 29 Kasım 2010 - 19:36:05

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sem

Bağlantılar 1.6 sürümü için güncellendi...

Eklenen Özellik;

* Programın görünürlülüğü bildirim alanı simgesinden de yapılabiliyor. Böylece açık unuttuğumuz zaman dahi başka bir masaüstünden programı açma şansımız oluyor.




http://forum.ubuntu-tr.net/index.php/topic,22594.msg272094.html#msg272094

Başlığındaki istek programıdır.

Hata bildirimleri olursa düzeltmeye çalışırız.

Programı çalıştırmak için Uygulamar -> Donatılar -> Kısayol Oluşturucu
Ya da uçbirimden "Kisayol_Olusturucu" komutunu verin ya da "Kisayol_Olusturucu --minimized".  (minimized parametresi programı sistem tepsisiinde başlatacaktır.)





Programa eklenen özellikler;

* Sol tık ile istediğiniz kadar uygulama başlatabiliyorsunuz. Farenin orta tuşu ile bir kısayolu çalıştırdığınız zaman, tıkladığınız kısayol çalıştırılıyor ama program sistem tepsisine gidiyor.
* Boş bir alanda sağ tık yaparak yeni kayıt ekleme eklendi.
* Kısayollar üzerinde sağ tık yaparak işlem yapabiliriz (düzenleme/silme işlemleri)  //jayw ve alquirel'e selamlar =)
* Programın iki kere açılması engellendi (yani klavyenizden programa kısayol atayarak kullanabilirsiniz)
* Klavye kısayolları eklendi;
     a -> Ayraç ekle
     y -> Yeni kayıt ekle
     s -> Kayıt silme menüsü
     z -> Menüyü aç
     x -> Menüyü kapat
* Program rastgele değil, fare imlecinin bulunduğu yerde açılıyor. (bildirim alanı simgesine tıklandığında hemen altta çıkıyor haliyle =))
* Mevcut ufak tefek bazı hatalar giderildi

32 Bit
64 bit


Kaynak kodlara /usr/share/Kisayol_Olusturucu/Kodlar dizininden ulaşabilirsiniz...

NOT: Programdaki en büyük değişiklik şu oldu; eski sürümde programın ayar dosyalarını .deb paketi oluşturuyordu. Bu sürümde ayar dosyalarını program kendisi oluşturuyor (~/.Kisayol_Olusturucu). Programın dışardan alması gereken tek şey logosu. Bu logoyu ise /usr/share/Kisayol_Olusturucu/LOGO/Logo.png adresinden alıyor. Bu durumu şu nedenle düşündük; program dışardan ne kadar az şeye ihtiyaç duyarsa diğer dağıtımlarda da çalışma ihtimali artacak (çünkü deb paketine bağımlılığı azalıyor.)

Hem bu şekilde bilgisayardaki her kullancı kendi kısayollarını kullanabilecek...

Yani yukarda verilen .deb paketlerini arşiv yöneticisi ile açarak içlerinden çalışan dosyaları alabilirsiniz ve çift tık ile diğer dağıtımlarda da kullanabilirsiniz. Yalnız /usr/share/Kisayol_Olusturucu/LOGO/Logo.png    adresinde bir logo bulunmalı. Aksi halde program yine çalışır fakat simge duruma küçüldüğünde, resmi olmadığı için siz programı göremezsiniz.

Gerekli kütüphanelerinde sisteminizde yüklü olduğundan emin olmalısınız tabii ki (GTK)

Diğer dağıtımlarda çok fazla deneme şansımız olmadı açıkcası ama ufak denemelerde çalışmadığına dair bir işaret de göremedik =)=)=) Archbang örneği;



Bildirilen hata olursa düzeltmeye  çalışırız arkdaşlar

Programı kaldırmak için;

sudo apt-get remove kisayol
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

utdmr

Çok güzel olmuş, ellerinize sağlık :).

Programın KDE ile de sorunsuz çalıştığını belirteyim, muadili bir program KDE simgelerini gösteremiyordu.

Çok teşekkürler tekrar :). Daha nice çalışmalara :).
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

Alıntı yapılan: utdmr - 29 Kasım 2010 - 20:49:04
Çok güzel olmuş, ellerinize sağlık :).

Programın KDE ile de sorunsuz çalıştığını belirteyim, muadili bir program KDE simgelerini gösteremiyordu.

Çok teşekkürler tekrar :). Daha nice çalışmalara :).

Beğenmenize sevindim açıkcası...

Yalnız tamamen GTK+ fonksiyonları kullandık, KDE ile çalışmasına da ayrıca şaşırdım...  Garip geldi biraz, demek ki arka planda tahmin ettiğimden biraz daha değişik işler oluyor =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

heartsmagic

Gerekli GTK kütüphaneleri yüklü olduğu sürce çalışır :)
Bir elinize sağlık da buradan diyeyim.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

Alıntı yapılan: heartsmagic - 29 Kasım 2010 - 20:59:07
Gerekli GTK kütüphaneleri yüklü olduğu sürce çalışır :)
Bir elinize sağlık da buradan diyeyim.

Koskoca Amarok Gnome ile çalışıyor sonuçta gerekli bileşenler ile değil mi, yani bu neden çalışmasın =) Evet yanlış düşünmüşüm ben...
(Amarok'u KDE programlarndan bildiğim için böyle dedim)

Biz de buradan da teşekkür edelim tekrardan...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

jayw

Elinize sağlık @sem0900, gerçekten çok başarılı bir program olmuş :) Fakat müsadenizle ufak bir tavsiyede bulunmak isterim, sanki mevcut kısayolları düzenlemek için de bir düğme olsa harika olurmuş gibi geldi bana. Eğer varsa ve benim dikkatimden kaçtıysa özür dilerim :)

sem

Teşekkürler, beğenmenize sevindim @jayw.

Programı sadece ben değil de Uygulama Geliştirme Ekibi olarak geliştirdik. Onu belirterek başlayayım.

Öneri için çok teşekkürler. Aklınıza fikir geldikçe paylaşırsanız bu tarz fikirler  işimize çok yarayacaktır, yani öneriye açığız her zaman diyelim =).

Sonra öneri için cevabımı vererek iletimi noktalayayım =) Aslında bu fikir olarak benim aklımdan geçmişti. Fakat arkadaşlara ek özellik olarak neden sunmadığımı açıklayayım; düşündüm bu tarz bir şeye gerek olur mu diye. Gerek olmayacağını ya da nadiren gerek olursa ekleme/silme özellikleri ile de iş görülebileceğini düşündüm. Şöyle ki;

Kayıt Düzenle tuşu tıklandı ->  (açıldı menü) Düzenlenecek Kaydın ID NO:  -> (id no girildi) kaydın bilgileri gözüktü kişi değişiklikleri yaptı.

Ya da
kaydı sil & yeni kayıt ekle... Yani aslında aynı kapıya çıkıyor gibi oluyordu...

Yani uygulamanın basitliği nedeni koyulmadı desek yanlış söylemiş olmayız sanırım. Sizce yine de olsa daha mı iyi olur?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alquirel

Bence de Düzenle seçeneği olmalı. Pire için yorgan yakmaya gerek yok ;)

Kendinizi başlatıcı komutta sadece bir harf değiştirme durumunda kabul edin. Silip baştan yapar mısınız?

Ekleme : Seçilen resimler varsayılan simge boyutuna ölçeklenebilir mesela.

sem

Teşekkürler öneriler için.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alquirel

Yüksek hoşgörünüze sığınarak tavsiyelerime devam ediyorum :)

- Alt+F2 ile çıkan pencere gibi bir kısayol oluşturulabilir. (Ya da var ben bilmiyorum)
- Klavye kısayollarından "Kisayol_Olusturucu" komutuna bir kısayol oluşturdum ancak o da sistem tepsisinde uygulamayı tekrar açmalara neden oldu.
- Pencere ekranın ortasında konumlanarak başlatılabilir. Klavye kısayolu olursa ortada başlamak avantaj olur hatta.
- Bir ayraç eklediğimde en sondaki kısayolu o ayracın altına taşımak için Sona Al dediğimde Son Kayda Bu İşlemi uygulayamıyor. Ayracın da taşınabilir bir öğe olması lazım. (mesela ona da id vererek)

Şimdilik bu kadar ;)

jayw

Eğer eklemesi gerçekten çok vaktinizi almayacaksa, düzenle düğmesinin olmasında fayda olduğunu düşünüyorum. Yine de programa bu kadar emek verdiğinizi (1879 satır) göz önüne alırsak, programı her haliyle kabul ettiğimizi ve tekrar teşekkür ettiğimizi iletmek isterim :)

Not: @alquirel gerçekten güzel tavsiyelerde bulunmuş. Belki bu özellikler (ve zaman içinde gelen diğer tavsiyeler) ile program zenginleştirilip, launchpad'de program için bir sayfa açılaibilir. Bu gidişle bir çok kişinin işine yarayacak, güzel bir program olacak gibi görünüyor. Program şu durumuyla da yeterince başarılı ama neden daha güzel olmasın ve neden launchpad'de yer almasın? :)

sem

@jayw, teşekkürler çok =)

Evet tavsiyeler güzel. Vakit oldukça yapabildiklerimizi yapmaya çalışırız. Aslında launchpad sayfamız da olacak gibi de işte kullanmayı bilmediğimiz için projeyi oraya taşıyaşamadık.=) @ironic'ten öğrenmeyi düşünüyorum kullanmayı =)Zamanla  öğreniriz umarım...

Tavsiyeler için alquirel ve jayw arkadaşlara tekrar teşekkür edelim...

İyi geceler diliyorum =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sem

#12
Pogram güncellendi ayrıntılar ilk iletide mevcut


EK: Önce ilk sürümü silmenizi tavsiye ediyorum, ne olur ne olmaz... =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

jayw

#13
Alıntı yapılan: sem0900 - 29 Kasım 2010 - 19:36:05
* Kısayollar üzerinde sağ tık yaparak işlem yapabiliriz (düzenleme/silme işlemleri)  //jayw ve alquirel'e selamlar =)

Madem öyle 1.5 sürümü için ilk teşekkür benden olsun :) Program gelişimine devam ediyor, özellikle düzenleme işlevi için tekrar teşekkürler. Hemen kurdum ve denedim, çok detaylı bir test yapamadım ama bu kısa deneyimde herhangi bir sorunla karşılaşmadım. Gayet güzel çalışıyor, elinize sağlık :)

Not: Önceki sürümde de var mıydı hatırlamıyorum ama Yedekleme / Geri Yükleme işlevleri gayet güzel olmuş :)

sem

Teşekkür ederiz jayw, beğenmene sevindim; şahsım adına konuşayım... Vardı sanırım Yedekleme/Geri Yükleme ama çok emin değilim ben  de =)


Alıntı yapılan: alquirel - 30 Kasım 2010 - 01:45:49
- Bir ayraç eklediğimde en sondaki kısayolu o ayracın altına taşımak için Sona Al dediğimde Son Kayda Bu İşlemi uygulayamıyor. Ayracın da taşınabilir bir öğe olması lazım. (mesela ona da id vererek)

En başta bir ayraç eklediniz sonra kayıtları  eklemeye başladınız... İlk kaydı öne almaya çalışınca da olmayacaktır...

Aslında programın işleyişi ile alakalı biraz, yoksa Ayraçların da ID'leri var... "Kullanıcının görmediği ID" , "gördüğü ID" ibareleri kaynak kodlarda bulunabilir...

ID dediğimiz aslında satır numarası =)

Ayraçlar ve Düğmeler aynı dosyada olduğu için

Düğme
Ayraç
Ayraç
Düğme

Şeklinde olursa ikinci düğme ID'si kullancının görmediği ID'de 4, gördüğü ID'de 2 oluyor... Gibi...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

utdmr

#15
Qt öğrenince sizin programınıza da bakarak ben de bu tarz bir şey yapayım dedim, ortaya şöyle bir şey çıktı:



Python3 ve PyQt kullandım.

Ama başlıktaki program gibi ayraç ekleme, sistem çekmecesinde bekleme ve en önemlisi başlatıcıları sıralama gibi özellikleri ekleyemedim, başlıkları hangi sırayla gösterdiğini ben bile bilmiyorum :).

Ama belki GTK kütüphaneleri kurmak istemeyen biri kullanabilir, kodlar aşağıda, bir .py dosyasına kaydedip çalıştırmanız yeterli.

#!/usr/bin/python

#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.
#   Contact:
#   Utku Demir
#   utdemir@gmail.com


from PyQt4 import QtCore,QtGui
import sys, subprocess, shlex, os, re

connect=QtCore.QObject.connect
SIGNAL=QtCore.SIGNAL

def get_icon_object(icon):
    try:
        if icon[0]=="/":
            obj=QtGui.QIcon(icon)
        else:
            obj=QtGui.QIcon.fromTheme(icon)
            if obj.isNull():
                obj=QtGui.QIcon("/usr/share/pixmaps/"+icon)
    except:
        obj=QtGui.QIcon(icon)
    return obj

class runners():
    def __init__(self):
        self.s=QtCore.QSettings("u-runner-runners")
        self.read_runners()

    def write_runners(self):
        for i in self.s.childGroups():
            self.s.remove(i)
        for i in self.runners_list.keys():
            self.s.beginGroup(i)
            self.s.setValue("name",i)
            self.s.setValue("command",self.runners_list[i]["command"])
            self.s.setValue("icon",self.runners_list[i]["icon"])
            self.s.endGroup()
   
    def read_runners(self):
        self.runners_list={}
        for i in self.s.childGroups():
            self.s.beginGroup(i)
            self.runners_list[i]={}
            self.runners_list[i]["name"]=self.s.value("name")
            self.runners_list[i]["command"]=self.s.value("command")
            self.runners_list[i]["icon"]=self.s.value("icon")
            self.s.endGroup()

class options():
    def __init__(self):
        self.s=QtCore.QSettings("u-runner-options")
        self.read_options()
    def read_options(self):
        self.options_list={}
        for i in self.s.childKeys():
            self.options_list[str(i)]=self.s.value(i)
        if not "column" in self.options_list.keys():
            self.options_list["column"]="3"
        if not "size" in self.options_list.keys():
            self.options_list["size"]="50"
        if not "run" in self.options_list.keys():
            self.options_list["run"]="true"

    def write_options(self):
        for i in self.options_list.keys():
            self.s.setValue(i,self.options_list[i])
       
class launcher(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
       
        self.setWindowTitle("u-Runner")

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
               
        s=options()

        run_layout=QtGui.QHBoxLayout()
       
        self.run_box=QtGui.QLineEdit()
        connect(self.run_box,SIGNAL("returnPressed()"),self.run)
       
        run_button=QtGui.QPushButton("Run")
        connect(run_button,SIGNAL("clicked()"),self.run)
     
        run_layout.addWidget(self.run_box)
        run_layout.addWidget(run_button)
       
        layout=QtGui.QGridLayout()

        self.buttons=[]
        for i in runners().runners_list:
            self.buttons.append(QtGui.QPushButton())

        size=int(s.options_list["size"])
        r=runners()
        for i in range(len(r.runners_list.keys())):
            name=list(r.runners_list.keys())[i]
            command=r.runners_list[name]["command"]
            icon=get_icon_object(r.runners_list[name]["icon"])
           
            self.buttons[i].setIcon(icon)
            self.buttons[i].setText(r.runners_list[name]["name"])
            self.buttons[i].enterEvent=lambda x,command=command:self.run_box.setText(command)
            self.buttons[i].leaveEvent=lambda x:self.run_box.setText("")

            self.buttons[i].setIconSize(QtCore.QSize(size,size))
            connect(self.buttons[i],SIGNAL("clicked()"),lambda name=name:self.clicked(name))
           
        column=int(s.options_list["column"])
       
        if column>len(self.buttons):
            for i in range(len(self.buttons)):
                layout.addWidget(self.buttons[i],0,i)
        else:
            rows=0
            if len(self.buttons)%column==0:
                rows=len(self.buttons)//column
            else:
                rows=len(self.buttons)//column+1

            n=0
            for i in range(rows):
                for j in range(column):
                    try:
                        layout.addWidget(self.buttons[column*i+j],i,j)
                    except:
                        pass

        config_layout=QtGui.QHBoxLayout()
       
        add_button=QtGui.QPushButton("Add")
        edit_button=QtGui.QPushButton("Edit")
        refresh_button=QtGui.QPushButton("Refresh")
        options_button=QtGui.QPushButton("Options")

        connect(add_button,SIGNAL("clicked()"),lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-a"]))
        connect(edit_button,SIGNAL("clicked()"),lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-e"]))
        connect(refresh_button,SIGNAL("clicked()"),lambda :subprocess.Popen([os.path.abspath(sys.argv[0])]) and sys.exit(0))
        connect(options_button,SIGNAL("clicked()"),lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-o"]))
       
        config_layout.addWidget(add_button)
        config_layout.addWidget(edit_button)
        config_layout.addWidget(options_button)
        config_layout.addWidget(refresh_button)
       
        big_layout=QtGui.QVBoxLayout()

        if s.options_list["run"]=="true":       
            big_layout.addLayout(run_layout)
        big_layout.addLayout(layout)
        big_layout.addLayout(config_layout)
       
        self.setLayout(big_layout)

    def adjust_sizes(self):
        max_width=0
        for i in self.buttons:
            if i.geometry().width() > max_width : max_width=i.geometry().width()
        for i in self.buttons: i.setMinimumSize(max_width,0)
    def clicked(self,n):
        args = shlex.split(str(runners().runners_list[n]["command"]))
        subprocess.Popen(args)
        sys.exit(0)
    def run(self):
        try:
            subprocess.Popen(shlex.split(str(self.run_box.text())))
        except: return None
        sys.exit(0)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            sys.exit(0)
       
class add(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Add Runner - u-Runner")

        self.setAcceptDrops(True)

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
       
        form_layout=QtGui.QFormLayout()

        self.name_input=QtGui.QLineEdit()
        self.command_input=QtGui.QLineEdit()
       
        form_layout.addRow("Name",self.name_input)
        form_layout.addRow("Command",self.command_input)
               
        big_layout=QtGui.QHBoxLayout()
       
        self.icon_button=QtGui.QPushButton()
        self.icon_path=""

        icon=QtGui.QIcon(app.style().standardPixmap(12))
        self.icon_button.setIcon(icon)

        s=options()
        size=int(s.options_list["size"])
       
        self.icon_button.setIconSize(QtCore.QSize(size,size))

        connect(self.icon_button,SIGNAL("clicked()"),self.select_icon)
       
        big_layout.addWidget(self.icon_button)
       
        big_layout.addLayout(form_layout)

        full_layout=QtGui.QVBoxLayout()

        full_layout.addWidget(QtGui.QLabel("You can either enter the information or drag and drop a shortcut here."))
       
        full_layout.addLayout(big_layout)
       
        save_button=QtGui.QPushButton("Save")
        connect(save_button,SIGNAL("clicked()"),self.save)
       
        full_layout.addWidget(save_button)

        self.setLayout(full_layout)
       
    def dragEnterEvent(self,event):
        if event.mimeData().text()[-8:]==".desktop":
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
        else: event.ignore()
       
    def dropEvent(self,event):
        d=open(event.mimeData().text()[7:],encoding="utf-8")
        d=d.read()
        name=re.search("Name=(.*)",d).groups()[0]
        icon=re.search("Icon=(.*)",d).groups()[0]
        comm=re.search("Exec=(.*)",d).groups()[0]
        self.name_input.setText(name)
        self.command_input.setText(comm)
        self.icon_button.setIcon(get_icon_object(icon))
        self.icon=icon
   
    def select_icon(self):
        self.icon=QtGui.QFileDialog.getOpenFileName(caption="Select Icon",directory="/usr/share/icons")
        if self.icon:
            self.icon_button.setIcon(QtGui.QIcon(self.icon))
       
    def save(self):
        name=self.name_input.text()
        command=self.command_input.text()
        icon=self.icon
       
        s=runners()
       
        s.runners_list[name]={"name":name,"command":command,"icon":icon}
        s.write_runners()
       
        sys.exit(0)

class edit(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Delete Runner - u-Runner")
       
        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
       
        layout=QtGui.QFormLayout()
               
        self.box=QtGui.QComboBox()
        connect(self.box,SIGNAL("activated(const QString&)"),self.selected)
       
        for i in runners().runners_list.keys():
            d=runners().runners_list[i]
            icon=get_icon_object(d["icon"])
            self.box.addItem(icon,d["name"])
       
        layout.addRow("Name",self.box)

        self.name_input=QtGui.QLineEdit()
        self.command_input=QtGui.QLineEdit()
        self.icon_button=QtGui.QPushButton()
        connect(self.icon_button,SIGNAL("clicked()"),self.select_icon)
       
        size=int(options().options_list["size"])
        self.icon_button.setIconSize(QtCore.QSize(size,size))
       
        layout.addRow("Name",self.name_input)
        layout.addRow("Command",self.command_input)
        layout.addRow("Icon",self.icon_button)
               
        save_button=QtGui.QPushButton("Save")
        delete_button=QtGui.QPushButton("Delete")
        connect(save_button,SIGNAL("clicked()"),self.save)
        connect(delete_button,SIGNAL("clicked()"),lambda :self.save(delete=True))

        self.selected()

        b=QtGui.QHBoxLayout()
        b.addWidget(delete_button)
        b.addWidget(save_button)

        main_layout=QtGui.QVBoxLayout()
       
        main_layout.addLayout(layout)
        main_layout.addLayout(b)

        self.setLayout(main_layout)

    def select_icon(self):
        self.icon=QtGui.QFileDialog.getOpenFileName(caption="Select Icon",directory="/usr/share/icons")
        if self.icon:
            self.icon_button.setIcon(QtGui.QIcon(self.icon))
           
    def save(self,delete=False):
        name=self.name_input.text()
        command=self.command_input.text()
        icon=self.icon

        old=self.box.itemText(self.box.currentIndex())
        s=runners()
        del s.runners_list[old]
        if not delete:
            s.runners_list[name]={}
            s.runners_list[name]["name"]=name
            s.runners_list[name]["command"]=command
            s.runners_list[name]["icon"]=icon
        s.write_runners()
        sys.exit(0)
       
    def selected(self,name=""):
        if name=="": name=self.box.itemText(self.box.currentIndex())
        s=runners()

        self.name_input.setText(s.runners_list[name]["name"])
        self.command_input.setText(s.runners_list[name]["command"])

        self.icon=s.runners_list[name]["icon"]

        self.icon_button.setIcon(get_icon_object(self.icon))
             
class options_window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Options - u-Runner")
       
        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        s=options()

        main_layout=QtGui.QVBoxLayout()
        form_layout=QtGui.QFormLayout()

        self.column_input=QtGui.QLineEdit()
        self.column_input.setText(s.options_list["column"])
        self.column_input.setValidator(QtGui.QIntValidator(1,10,self.column_input))
        form_layout.addRow("Number of Columns: (1-10)",self.column_input)

        size_label=QtGui.QLabel("Button Size: (10-200)")
        self.size_input=QtGui.QLineEdit()
        self.size_input.setText(s.options_list["size"])
        self.size_input.setValidator(QtGui.QIntValidator(10,200,self.size_input))
        form_layout.addRow("Button Size: (10-200)",self.size_input)


        run_label=QtGui.QLabel("Show \"Run command\"?")
        self.run_check=QtGui.QCheckBox()
        if s.options_list["run"]=="true":
            self.run_check.setChecked(True)
        form_layout.addRow("Show \"Run command\"?",self.run_check)

        save_button=QtGui.QPushButton("Save")
        connect(save_button,SIGNAL('clicked()'),self.save)

        main_layout.addLayout(form_layout)
        main_layout.addWidget(save_button)

        self.setLayout(main_layout)

    def save(self):
        s=options()
        s.options_list={}
        s.options_list["column"]=self.column_input.text()
        s.options_list["size"]=self.size_input.text()
        s.options_list["run"]=self.run_check.isChecked()
        s.write_options()
        s.read_options()
        sys.exit(0)

app=QtGui.QApplication(sys.argv)

if len(sys.argv)!=1 and sys.argv[1]=="-a":
    g=add()
elif len(sys.argv)!=1 and sys.argv[1]=="-e":
    g=edit()
elif len(sys.argv)!=1 and sys.argv[1]=="-o":
    g=options_window()
else:
    g=launcher()
    g.show()
    g.adjust_sizes()
g.show()
app.exec_()
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

Elinize sağlık @utdemir... İşlevselliğinin yanında tasarım olarak da çok hoş gözüküyor...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sem

@utdemir, Amarok yüklü bir sistemde bu hata normal midir?

sem0900@debian:~$ '/home/sem0900/Desktop/df.py'
Traceback (most recent call last):
  File "/home/sem0900/Desktop/df.py", line 22, in <module>
    from PyQt4 import QtCore,QtGui
ImportError: No module named PyQt4


QT kütüphaneleri mi eksik yoksa 22 satır ile ilgili başka bir sıkıntı mı var?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sema

#18
@sem, PyQt4 paketi yüklü mü acaba? Belki sorun odur? Yalnız paketin tam ismi PyQt4 değil sanırım, yazılım merkezine yazarsan çıkıyor.

Ek:

http://talk.maemo.org/showpost.php?p=499752&postcount=5
susema

utdmr

PyQt paketi yüklü olsa da çalışmama ihtimali var, çünkü bir de Python 3'e göre derlenmiş olması gerekiyor PyQt'nin. Büyük ihtimalle Python 2'ye göre gelecektir o paket. Belki yeni sürümlerin depolarından edinilebilir o paket, pek bir fikrim yok.

pyqt 4.8.3 ve python 3.2 ile çalışıyor sistemimde.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

Şöyle gelişti olaylar
Alıntı Yapsem0900@debian:~$ dpkg -l | grep *pyqt4*
sem0900@debian:~$ apt-cache search PyQt4
python-pivy - Coin binding for Python
pyqt4-dev-tools - Development tools for PyQt4
python-qt4-dbg - Python bindings for Qt4 (debug extensions)
python-qt4-dbus-dbg - DBus Support for PyQt4 (debug extensions)
python-qt4-dbus - DBus Support for PyQt4
python-qt4-dev - Development files for PyQt4
python-qt4-doc - Documentation and examples for PyQt4
python-qt4-gl-dbg - Python bindings for Qt4's OpenGL module (debug extension)
python-qt4-gl - Python bindings for Qt4's OpenGL module
python-qt4-phonon-dbg - Python bindings for Phonon (debug extensions)
python-qt4-phonon - Python bindings for Phonon
python-qt4-sql-dbg - Python bindings for PyQt4's SQL module (debug extension)
python-qt4-sql - Python bindings for PyQt4's SQL module
python-qt4 - Python bindings for Qt4
python-qscintilla2 - Python bindings for QScintilla 2
sem0900@debian:~$ dpkg -l | grep *pyqt4*
sem0900@debian:~$





Ben de çıkmadı ama depoda hayli varmış... İlk paketi kurdum sorun kalktı. Şu grafik kütüphanesi olayını tam anlamı ile kavrayamadım ben sanırım =) Ya da her dil için ayrı olması mı manasız geldi acaba bana...

Bakayım... Yok o da mantıklı gibi aslında.

Şu paket ile çalıştı program.... Tekrardan elinize sağlık.
sudo apt-get install pyqt4-dev-tools


Bir kaç işlevini denedim programın.. Şöyle bir sıkıntı oldu... Bu da benimle ilgili sanırım =)

Alıntı Yapsem0900@debian:~$ '/home/sem0900/Desktop/df.py'
Traceback (most recent call last):
  File "/home/sem0900/Desktop/df.py", line 423, in <module>
    g=launcher()
  File "/home/sem0900/Desktop/df.py", line 113, in __init__
    size=int(s.options_list["size"])
TypeError: int() argument must be a string or a number, not 'QVariant'


EK: @utdemir sizin son iletiniz ve candy senin son düzenlemeyi sonradan gördüm maalesef =) Umarım siz de bu eki sonradan görmezsiniz...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

utdmr

@sem0900; Programın kodlarını yamalaya yamalaya Python 2 ile çalışacak hale getirdim sanırım; aşağıdaki şekilde dener misiniz?
#!/usr/bin/python

#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.
#   Contact:
#   Utku Demir
#   utdemir@gmail.com


from PyQt4 import QtCore,QtGui
import sys, subprocess, shlex, os, re
from functools import partial

def get_icon_object(icon):
    try:
        if icon[0]=="/":
            obj=QtGui.QIcon(icon)
        else:
            obj=QtGui.QIcon.fromTheme(icon)
            if obj.isNull():
                obj=QtGui.QIcon("/usr/share/pixmaps/"+icon)
    except:
        obj=QtGui.QIcon(icon)
    return obj

class runners():
    def __init__(self):
        self.s=QtCore.QSettings("u-runner-runners")
        self.read_runners()

    def write_runners(self):
        for i in self.s.childGroups():
            self.s.remove(i)
        for i in self.runners_list.keys():
            self.s.beginGroup(i)
            self.s.setValue("name", i)
            self.s.setValue("command", self.runners_list[i]["command"])
            self.s.setValue("icon", self.runners_list[i]["icon"])
            self.s.endGroup()

    def read_runners(self):
        self.runners_list={}
        for i in self.s.childGroups():
            self.s.beginGroup(i)
            self.runners_list[i]={}
            self.runners_list[i]["name"]=self.s.value("name")
            self.runners_list[i]["command"]=self.s.value("command")
            self.runners_list[i]["icon"]=self.s.value("icon")
            self.s.endGroup()
        for i in self.runners_list:
            for j in self.runners_list[i]:
                try: self.runners_list[i][j]=self.runners_list[i][j].toPyObject()
                except: pass

class options():
    def __init__(self):
        self.s=QtCore.QSettings("u-runner-options")
        self.read_options()
    def read_options(self):
        self.options_list={}
        for i in self.s.childKeys():
            self.options_list[str(i)]=self.s.value(i)
        if not "column" in self.options_list.keys():
            self.options_list["column"]="3"
        if not "size" in self.options_list.keys():
            self.options_list["size"]="50"
        if not "run" in self.options_list.keys():
            self.options_list["run"]="true"
        for i in self.options_list:
            try: self.options_list[i]=self.options_list[i].toPyObject()
            except: pass
    def write_options(self):
        for i in self.options_list.keys():
            self.s.setValue(i,self.options_list[i])


class launcher(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("u-Runner")

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        s=options()

        run_layout=QtGui.QHBoxLayout()

        self.run_box=QtGui.QLineEdit()
        self.run_box.returnPressed.connect(self.run)

        run_button=QtGui.QPushButton("Run")
        run_button.clicked.connect(self.run)
        run_layout.addWidget(self.run_box)
        run_layout.addWidget(run_button)

        layout=QtGui.QGridLayout()

        self.buttons=[]

        size=int(s.options_list["size"])
        only_icons=s.options_list["only_icons"]=="true"
        r=runners()
       
        for name in r.runners_list.items():
            name=name[0]
            command=r.runners_list[name]["command"]
            icon=get_icon_object(r.runners_list[name]["icon"])

            self.buttons.append(QtGui.QPushButton())

            self.buttons[-1].setIcon(icon)
            if not only_icons: self.buttons[-1].setText(r.runners_list[name]["name"])
            self.buttons[-1].enterEvent=lambda x,command=command:self.run_box.setText(command)
            self.buttons[-1].leaveEvent=lambda x:self.run_box.setText("")

            self.buttons[-1].setIconSize(QtCore.QSize(size,size))
            self.buttons[-1].clicked.connect(partial(self.clicked,name))

        column=int(s.options_list["column"])

        if column>len(self.buttons):
            for i in range(len(self.buttons)):
                layout.addWidget(self.buttons[i],0,i)
        else:
            rows=0
            if len(self.buttons)%column==0:
                rows=len(self.buttons)//column
            else:
                rows=len(self.buttons)//column+1

            for i in range(rows):
                for j in range(column):
                    try:
                        layout.addWidget(self.buttons[column*i+j],i,j)
                    except:
                        pass

        config_layout=QtGui.QHBoxLayout()

        add_button=QtGui.QPushButton("Add")
        edit_button=QtGui.QPushButton("Edit")
        refresh_button=QtGui.QPushButton("Refresh")
        options_button=QtGui.QPushButton("Options")

        add_button.clicked.connect(lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-a"]))
        edit_button.clicked.connect(lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-e"]))
        refresh_button.clicked.connect(lambda :subprocess.Popen([os.path.abspath(sys.argv[0])]) and sys.exit(0))
        options_button.clicked.connect(lambda :subprocess.Popen([os.path.abspath(sys.argv[0]),"-o"]))


        config_layout.addWidget(add_button)
        config_layout.addWidget(edit_button)
        config_layout.addWidget(options_button)
        config_layout.addWidget(refresh_button)

        big_layout=QtGui.QVBoxLayout()

        if s.options_list["run"]=="true":
            big_layout.addLayout(run_layout)
        big_layout.addLayout(layout)
        big_layout.addLayout(config_layout)

        self.setLayout(big_layout)

    def adjust_sizes(self):
        max_width=0
        for i in self.buttons:
            if i.geometry().width() > max_width : max_width=i.geometry().width()
        for i in self.buttons: i.setMinimumSize(max_width,0)
    def clicked(self,n):
        args = shlex.split(str(runners().runners_list[n]["command"]))
        subprocess.Popen(args)
        sys.exit(0)
    def run(self):
        try:
            subprocess.Popen(shlex.split(str(self.run_box.text())))
        except: return None
        sys.exit(0)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            sys.exit(0)

class add(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Add Runner - u-Runner")

        self.setAcceptDrops(True)

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        form_layout=QtGui.QFormLayout()

        self.name_input=QtGui.QLineEdit()
        self.command_input=QtGui.QLineEdit()

        form_layout.addRow("Name",self.name_input)
        form_layout.addRow("Command",self.command_input)

        big_layout=QtGui.QHBoxLayout()

        self.icon_button=QtGui.QPushButton()
        self.icon_path=""

        icon=QtGui.QIcon(app.style().standardPixmap(12))
        self.icon_button.setIcon(icon)

        s=options()
        size=int(s.options_list["size"])

        self.icon_button.setIconSize(QtCore.QSize(size,size))

        self.icon_button.clicked.connect(self.select_icon)

        big_layout.addWidget(self.icon_button)

        big_layout.addLayout(form_layout)

        full_layout=QtGui.QVBoxLayout()

        full_layout.addWidget(QtGui.QLabel("You can either enter the information or drag and drop a shortcut here."))

        full_layout.addLayout(big_layout)

        save_button=QtGui.QPushButton("Save")

        save_button.clicked.connect(self.save)

        full_layout.addWidget(save_button)

        self.setLayout(full_layout)

    def dragEnterEvent(self,event):
        if event.mimeData().text()[-8:]==".desktop":
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
        else: event.ignore()

    def dropEvent(self,event):
        d=open(event.mimeData().text()[7:],encoding="utf-8")
        d=d.read()
        name=re.search("Name=(.*)",d).groups()[0]
        icon=re.search("Icon=(.*)",d).groups()[0]
        comm=re.search("Exec=(.*)",d).groups()[0]
        self.name_input.setText(name)
        self.command_input.setText(comm)
        self.icon_button.setIcon(get_icon_object(icon))
        self.icon=icon

    def select_icon(self):
        self.icon=QtGui.QFileDialog.getOpenFileName(caption="Select Icon",directory="/usr/share/icons")
        if self.icon:
            self.icon_button.setIcon(QtGui.QIcon(self.icon))

    def save(self):
        name=self.name_input.text()
        command=self.command_input.text()
        icon=self.icon

        s=runners()

        s.runners_list[name]={"name":name,"command":command,"icon":icon}
        s.write_runners()

        sys.exit(0)

class edit(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Edit Runners - u-Runner")

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        layout=QtGui.QFormLayout()

        self.box=QtGui.QComboBox()

        self.box.activated[str].connect(self.selected)

        for i in runners().runners_list.keys():
            d=runners().runners_list[i]
            icon=get_icon_object(d["icon"])
            self.box.addItem(icon,d["name"])

        layout.addRow("Name",self.box)

        self.name_input=QtGui.QLineEdit()
        self.command_input=QtGui.QLineEdit()
        self.icon_button=QtGui.QPushButton()

        self.icon_button.clicked.connect(self.select_icon)

        size=int(options().options_list["size"])
        self.icon_button.setIconSize(QtCore.QSize(size,size))

        layout.addRow("Name",self.name_input)
        layout.addRow("Command",self.command_input)
        layout.addRow("Icon",self.icon_button)

        sort_button=QtGui.QPushButton("Sorting")
        save_button=QtGui.QPushButton("Save")
        delete_button=QtGui.QPushButton("Delete")

        save_button.clicked.connect(self.save)

        delete_button.clicked.connect(partial(self.save, delete=True))

        sort_button.clicked.connect(lambda: subprocess.Popen([os.path.abspath(sys.argv[0]),"-s"]))

        self.selected()

        b=QtGui.QHBoxLayout()
        b.addWidget(delete_button)
        b.addWidget(save_button)

        main_layout=QtGui.QVBoxLayout()

        main_layout.addLayout(layout)
        main_layout.addLayout(b)

        self.setLayout(main_layout)

    def select_icon(self):
        self.icon=QtGui.QFileDialog.getOpenFileName(caption="Select Icon",directory="/usr/share/icons")
        if self.icon:
            self.icon_button.setIcon(QtGui.QIcon(self.icon))

    def save(self,delete=False):
        name=self.name_input.text()
        command=self.command_input.text()
        icon=self.icon

        old=self.box.itemText(self.box.currentIndex())
        s=runners()
        del s.runners_list[old]
        if not delete:
            s.runners_list[name]={}
            s.runners_list[name]["name"]=name
            s.runners_list[name]["command"]=command
            s.runners_list[name]["icon"]=icon
        s.write_runners()
        sys.exit(0)

    def selected(self,name=""):
        if name=="": name=self.box.itemText(self.box.currentIndex())
        s=runners()

        self.name_input.setText(s.runners_list[name]["name"])
        self.command_input.setText(s.runners_list[name]["command"])

        self.icon=s.runners_list[name]["icon"]

        self.icon_button.setIcon(get_icon_object(self.icon))

class options_window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Options - u-Runner")

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        s=options()

        main_layout=QtGui.QVBoxLayout()
        form_layout=QtGui.QFormLayout()

        self.column_input=QtGui.QLineEdit()
        self.column_input.setText(s.options_list["column"])
        self.column_input.setValidator(QtGui.QIntValidator(1,10,self.column_input))
        form_layout.addRow("Number of Columns: (1-10)",self.column_input)

        self.size_input=QtGui.QLineEdit()
        self.size_input.setText(s.options_list["size"])
        self.size_input.setValidator(QtGui.QIntValidator(10,200,self.size_input))
        form_layout.addRow("Button Size: (10-200)",self.size_input)

        self.run_check=QtGui.QCheckBox()
        if s.options_list["run"]=="true":
            self.run_check.setChecked(True)
        form_layout.addRow("Show \"Run command\" bar?",self.run_check)

        self.only_icons_check=QtGui.QCheckBox()
        if s.options_list["only_icons"]=="true":
            self.only_icons_check.setChecked(True)
        form_layout.addRow("Show only icons of runners?",self.only_icons_check)

        save_button=QtGui.QPushButton("Save")

        save_button.clicked.connect(self.save)

        main_layout.addLayout(form_layout)
        main_layout.addWidget(save_button)

        self.setLayout(main_layout)

    def save(self):
        s=options()
        s.options_list={}
        s.options_list["column"]=self.column_input.text()
        s.options_list["size"]=self.size_input.text()
        s.options_list["run"]=self.run_check.isChecked()
        s.options_list["only_icons"]=self.only_icons_check.isChecked()
        s.write_options()
        s.read_options()
        sys.exit(0)

class sort_window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.setWindowTitle("Sorting - u-Runner")

        screen=QtGui.QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)

        layout=QtGui.QHBoxLayout()
        buttonLayout=QtGui.QVBoxLayout()
       
        upButton=QtGui.QToolButton()
        upButton.setIcon(QtGui.QIcon.fromTheme("go-up"))
        upButton.clicked.connect(self.upClicked)
       
        downButton=QtGui.QToolButton()
        downButton.setIcon(QtGui.QIcon.fromTheme("go-down"))
        downButton.clicked.connect(self.downClicked)
       
        buttonLayout.addWidget(upButton)
        buttonLayout.addWidget(downButton)
       
        self.view=QtGui.QListWidget()
       
        layout.addWidget(self.view)
        layout.addLayout(buttonLayout)
       
        self.r=runners()
        self.updateView()
       
        self.setLayout(layout)
    def updateView(self):
        for name in sorted(self.r.runners_list.items(), key=lambda i:i[1]["order"]):
            name=name[0]
            item=QtGui.QListWidgetItem()
            item.setIcon(get_icon_object(self.r.runners_list[name]["icon"]))
            item.setText(self.r.runners_list[name]["name"])
            self.view.addItem(item)
    def upClicked(self):
        currentItem=self.view.currentItem().text()
        names=[]
        for name in sorted(self.r.runners_list.items(), key=lambda i:i[1]["order"]):
            name=name[0]
            names.append(name)
        print(currentItem)
        self.r.runners_list[currentItem]["order"]-=1
        print(currentItem)
        print(self.r.runners_list[names[names.index(currentItem)-1]])
        self.r.runners_list[names[names.index(currentItem)-1]]["order"]+=1
        self.updateView()
    def downClicked(self):
        pass
app=QtGui.QApplication(sys.argv)

if len(sys.argv)!=1 and sys.argv[1]=="-a":
    g=add()
elif len(sys.argv)!=1 and sys.argv[1]=="-e":
    g=edit()
elif len(sys.argv)!=1 and sys.argv[1]=="-o":
    g=options_window()
elif len(sys.argv)!=1 and sys.argv[1]=="-s":
    g=sort_window()
else:
    g=launcher()
    g.show()
    g.adjust_sizes()
g.show()
app.exec_()
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

1.6 sürüm için bağlantılar güncellendi...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?