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?
Odpowiedz
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 . 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.
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
To działa bardzo ładnie. Wielkie dzięki ! – rvcristiand
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