4

Tkinterで非標準のウィンドウを作成する方法はありますか?Tkinterウィジェットを内部に備えた、画面上に浮かぶ画像のようなものが必要です。Growl for Mac、iPadのSiri、Mac OSの音量/明るさの変更ベゼルなどを考えてみてください。これが不可能な場合は、ウィンドウのトップバーのタイトルを削除して閉じる/最小化する方法はありますか? /サイズ変更ボタン、および閉じるためにスクリプトを完了する必要がありますか(または修飾子-Qキーストローク)?

4

2 に答える 2

1

wm_overrideredirectは、標準のウィンドウの境界線を削除します。あなたはまだ長方形の窓で立ち往生するでしょう。ウィンドウの透明度はwm_attributes(属性を探すalpha)で調整できますが、これはWindowsとMacでのみ機能します。

いくつかのコードをコンパイルする必要がありますが、tcl / tkを使用してウィンドウを整形する試みがあり、Tkinterで作業できる可能性があります。tcl'erswikiのマネージドおよびシェーピングされたトップレベルを参照してください。

于 2012-09-26T16:04:37.657 に答える
1

ええ、できます!あなたが使用することができます

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")
于 2018-02-12T21:46:45.780 に答える