2017-12-13 2 views
0

フレーム内に複数のウィジェットがある場合、すべてのウィジェットの位置を一度にコマンドでシフトする方法はありますか? .place managerを使用しています。ありがとう!Tkinter Python:一度に複数のウィジェットを移動する

+1

すべての要素を一度に「フレーム」に移動することも、すべての要素を別々に移動することもできます。 'frame'(または全ての要素)を' place_forget() 'で取り除き、' place() 'で再配置してください。 – furas

+0

あなたが達成しようとしていることについてもう少し説明することをお勧めします。あなたがグループとしてウィジェットの束を動かす必要があると感じるなら、おそらく 'place 'を使うよりも良い解決策があります。 –

答えて

1

私は、変数ref_yref_yを定義して、ちょうどのように私の現在のxy値にそれらを追加します。

import tkinter as tk 

root = tk.Tk() 

ref_x = 40 
ref_y = 56 

btn = tk.Button(root, text="Button") 
lbl = tk.Label(root, text="Label") 

btn.place(x=ref_x + 45, y=ref_y + 13) 
lbl.place(x=ref_x + 13, y=ref_y + 44) 

root.mainloop() 

上記の例btnlblref_xref_yにrefereceに配置されます。つまり、ウィジェットを相対位置を変えずに配置する場合は、ref_xref_yの値を変更するだけです。

0

Frameにすべて入っている場合は、Frameに移動して、すべての要素を内側に移動します。

place_forget()を使用してウィンドウから削除し、もう一度place()を使用して新しい位置に配置します。

import tkinter as tk 
import random 

# --- funtions --- 

def move(): 
    # hide frame 
    f.place_forget() 

    # random positiom 
    new_x = random.randint(0, 100) 
    new_y = random.randint(0, 150) 

    # show in new place 
    f.place(x=new_x, y=new_y) 

# --- main --- 

root = tk.Tk() 

f = tk.Frame(root) 
f.place(x=0, y=0) 

tk.Label(f, text='HELLO!').pack() 
tk.Button(f, text='Move it', command=move).pack() 

root.mainloop() 
関連する問題