2015-06-03 16 views
6

Mam jeszcze zdecydować, jakiego języka i narzędzi użyć do mojego następnego projektu. Chciałbym użyć Pythona, ale chciałbym zaimplementować wstążkowe paski narzędzi. Niektóre prace zostały wykonane w Tk (http://www.ellogon.org/petasis/bibliography/Tcl2010/TkRibbon.pdf), ale wygląda na to, że nie zostały jeszcze zaimplementowane w tkinter. Czy jest coś, co mogę zrobić, aby to zadziałało?Czy istnieje sposób korzystania z pasków narzędzi wstążki w Tkinter?

+1

Domyślam się, że musiałbyś napisać własną bibliotekę wokół 'tkribbon', ponieważ podobno nikt jeszcze tego nie zrobił. Lub napisz jakiś kod, żeby zasymulować tego rodzaju pasek narzędzi ... – nbro

Odpowiedz

6

Musisz utworzyć opakowanie i pobrać wersję pliku binarnego, której możesz użyć. Zbudowałem to do użycia z Pythonem 3.4 i skopiowałem do tkribbon1.0-x86_64.zip. Powinieneś rozpakować to w podkatalogu Python/tcl, aby mogła zostać załadowana wersja tcl używana przez Pythona.

Minimalny wrapper wygląda następująco:

from tkinter import Widget 
from os import path 

class Ribbon(Widget): 
    def __init__(self, master, kw=None): 
     self.version = master.tk.call('package','require','tkribbon') 
     self.library = master.tk.eval('set ::tkribbon::library') 
     Widget.__init__(self, master, 'tkribbon::ribbon', kw=kw) 

    def load_resource(self, resource_file, resource_name='APPLICATION_RIBBON'): 
     """Load the ribbon definition from resources. 

     Ribbon markup is compiled using the uicc compiler and the resource included 
     in a dll. Load from the provided file.""" 
     self.tk.call(self._w, 'load_resources', resource_file) 
     self.tk.call(self._w, 'load_ui', resource_file, resource_name) 

if __name__ == '__main__': 
    import sys 
    from tkinter import * 
    def main(): 
     root = Tk() 
     r = Ribbon(root) 
     name = 'APPLICATION_RIBBON' 
     if len(sys.argv) > 1: 
      resource = sys.argv[1] 
      if len(sys.argv) > 2: 
       name = sys.argv[2] 
     else: 
      resource = path.join(r.library, 'libtkribbon1.0.dll') 
     r.load_resource(resource, name) 
     t = Text(root) 
     r.grid(sticky=(N,E,S,W)) 
     t.grid(sticky=(N,E,S,W)) 
     root.grid_columnconfigure(0, weight=1) 
     root.grid_rowconfigure(1, weight=1) 
     root.mainloop() 
    main() 

Running ten wykorzystuje zasoby wbudowany w dll tkribbon i wygląda this screenshot. Skomplikowany bit będzie pobierał niektóre zasoby znaczników wstążki do biblioteki DLL do załadowania.

Możesz użyć tego przykładu, aby załadować wstążki z istniejących aplikacji. Na przykład python Ribbon.py c:\Windows\System32\mspaint.exe MSPAINT_RIBBON załaduje zasobnik wstążki z mspaint. Nazwa zasobu w tym przypadku musi być uwzględniona, ponieważ wartość domyślna to APPLICATION_RIBBON. Dla własnej wstążki, użycie uicc do zbudowania pliku .rc, następnie rc /r file.rc do utworzenia pliku .res i wreszcie link -dll -out:file.dll file.rc -noentry -machine:AMD64 wydaje się działać, aby utworzyć bibliotekę DLL z samym zasobem, która działa z tym rozszerzeniem.

+0

Próbowałem go i działało całkiem rozsądnie, więc po pewnym czasie zaakceptuję to. Może jednak ktoś napisze opakowanie jednego dnia. – chaosflaws

+0

To działa bardzo ładnie. Wielkie dzięki ! – rvcristiand

Powiązane problemy