kivyで非矩形ウィンドウを作る方法についての記事です。
ちなみにこの記事の内容は開成学園コンピューター部の文化祭にて僕が書いた部誌とほぼ同じ内容です。
pdfになってるのでそちらが良ければここでダウンロードできます。
画像の用意
まずはウィンドウの形を決める画像を用意します。ここで気を付けてほしいのは、「透過情報を持たせた画像を用意する」ということです。Windows10で標準搭載されているペイント3Dなんかを使えば結構簡単にできます。
プログラムを書く
プログラムを書いていきます。
from kivy.config import Config
Config.set('graphics','shaped',1)
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.clock import Clock
import PIL
Window.fullscreen = False
Window.borderless = True
img_path = './HEBIKUNN.png'
img = PIL.Image.open(img_path)
class Test(App):
def build(self):
global img
Window.size = img.size
Clock.schedule_once(self.set)
snake = BoxLayout()
snake.add_widget(Button(text='1',on_press=lambda _: self.stop()))
snake.add_widget(Button(text='2'))
return snake
def set(self,dt):
global img_path
Window.shape_image = img_path
Window.shape_mode = 'binalpha'
Test().run()
とりあえず実行してみましょう。
↑こんな感じになったら成功です。
ちゃんと非矩形ウィンドウになってますね。
手順としては
- 透過情報をもった画像を用意する
- buildメソッドでWindow.sizeを画像のサイズにする
- shape_image,shape_modeをそれぞれ画像のパス、'binalpha'に設定する(非矩形ウィンドウにする為の設定です)
ということをするだけで簡単にできてしまいます。
難点
たしかにこの方法だと簡単に非矩形ウィンドウが作れるのですが、一つ気を付けないといけないことがあります。
それは、「処理が無茶苦茶重い」ということです。当たり前ですが矩形ウィンドウに比べると凄く重いです。
ですから実用的にはちょっと厳しいと思います。でもまぁ結構面白いこと(ディスプレイ上キャラクターが動くゲームを作ったりとか)ができたりするので、ぜひ遊んでみてください。