ttkthemes(などのテーマ系ライブラリ)と tkinterDnD2 を両立する方法

Posted on 2024年03月20日 (水) in 雑記

アイキャッチ

はじめに

Python に標準でついている GUI フレームワークとして、Tkinter があります。

Tkinter は単体でも使えますが、より便利に使うために様々な拡張機能が外部ライブラリとして存在しており、その中でも有名なものとして以下の2つがあります。

  • Tkinter のテーマを大量に追加する「ttkthemes」

  • Tkinter で作ったウィンドウでドラッグ・アンド・ドロップを可能にする「tkinterDnD2」

この2つのライブラリは非常に便利ですが、どちらも独自の TK()クラスを用いるため競合するため、そのままでは両立する事ができません。

そのため今回は両立を可能にするコードをこのページにメモしておこうと思います。

このやり方は customtkinter や ttkbootstrap でも継承元クラス(今回は ThemedTk)を変更すれば可能なやり方なので、そこで詰まったら参考にしてください(このコードは参考サイトのほぼ丸パクリです)

コード

class Tk(ThemedTk, TkinterDnD.DnDWrapper):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.TkdndVersion = TkinterDnD._require(self)

終わりに

このテーマ系ライブラリと tkinterDnD2 の競合は意に日本語サイトで取り上げられてないので書いてみました。

これは StackOverFlow をほぼ丸パクリしたものですが、元のサイトでは ttkthemes ではなく customtkinter で紹介されています。

参考サイト:https://stackoverflow.com/questions/75526264/using-drag-and-drop-files-or-file-picker-with-customtkinter