有没有办法在Tkinter中使用功能区工具栏?

有没有办法在Tkinter中使用功能区工具栏?,第1张

有没有办法在Tkinter中使用功能区工具栏?

您需要为此创建一个包装器,并获取可以使用的二进制版本。我将其构建为与Python
3.4结合使用,并将其复制到tkribbon1.0-x86_64.zip。您应该将此解压缩到Python
/ tcl子目录中,以便python使用的tcl版本可以加载它。

最小包装器如下所示:

from tkinter import Widgetfrom os import pathclass 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()

运行此命令将使用tkribbon
dll内置的资源,看起来像。复杂的一点是将某些Ribbon标记资源获取到DLL中进行加载

您可以使用此示例从现有应用程序加载功能区。例如,

python Ribbon.py c:WindowsSystem32mspaint.exeMSPAINT_RIBBON
将从mspaint加载功能区资源。在这种情况下,必须包含资源名称,因为默认名称是APPLICATION_RIBBON。对于您自己的功能区,使用uicc生成一个.rc文件,然后
rc/r file.rc
生成一个.res文件,最后
link -dll -out:file.dll file.rc -noentry-machine:AMD64
似乎可以生成与该扩展名一起使用的仅资源DLL。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5666168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存