Tkinterで非標準のウィンドウを作成する方法はありますか?Tkinterウィジェットを内部に備えた、画面上に浮かぶ画像のようなものが必要です。Growl for Mac、iPadのSiri、Mac OSの音量/明るさの変更ベゼルなどを考えてみてください。これが不可能な場合は、ウィンドウのトップバーのタイトルを削除して閉じる/最小化する方法はありますか? /サイズ変更ボタン、および閉じるためにスクリプトを完了する必要がありますか(または修飾子-Qキーストローク)?
2 に答える
wm_overrideredirectは、標準のウィンドウの境界線を削除します。あなたはまだ長方形の窓で立ち往生するでしょう。ウィンドウの透明度はwm_attributes(属性を探すalpha
)で調整できますが、これはWindowsとMacでのみ機能します。
いくつかのコードをコンパイルする必要がありますが、tcl / tkを使用してウィンドウを整形する試みがあり、Tkinterで作業できる可能性があります。tcl'erswikiのマネージドおよびシェーピングされたトップレベルを参照してください。
ええ、できます!あなたが使用することができます
app.overrideredirect(True)
ここで、app = Tk()
ここからは、トップレベルではないウィンドウで立ち往生しています。また、タスクバーの位置もありません。これを修正するために使用できます。
app.attributes('-topmost', 1)
しかし、今でも長方形しかありません。カスタムタイトルバーを作成する必要があります。これは、タイトル、終了、最小化ボタンなどのフレームです。
タイトルバーからウィンドウを移動するには、次を使用します。
def get_pos(event):
xwin = app.winfo_x()
ywin = app.winfo_y()
startx = event.x_root
starty = event.y_root
ywin = ywin - starty
xwin = xwin - startx
def move_window(event):
app.geometry("400x400" + '+{0}+{1}'.format(event.x_root + xwin, event.y_root + ywin))
startx = event.x_root
starty = event.y_root
app.TopFrame.bind('<B1-Motion>', move_window)
app.TopFrame.bind('<Button-1>', get_pos)
ここで、TopFrameはタイトルバーです。この方法は複雑すぎるように見えますが、コーナーに移動することなく、バーをマウス上で直接移動できます。
後者の質問に答える:フローティングオブジェクトを作成することは非常に可能です。使用する:
app.overrideredirect(True)
app.image = tk.PhotoImage(file='image.GIF')
image = Label(root, image=app.image, bg='white')
app.attributes("-transparentcolor", "white")