Tkinter使用网格几何管理器动态更改窗口小部件位置

时间:2018-08-21 13:13:42

标签: python tkinter

我当前正在开发一个程序,需要更改小部件的位置。
这是我的代码:

root = Tk()
frame = Frame(root, bg="black")
label1 = Label(frame, text="not important")
label.grid(row=1, column=1)
#some stuff happens
x = aFunctionThatReturnsXCoordinate #not actual name
y = aFunctionThatReturnsYCoordinate

现在我想将label1的位置更改为新坐标。
我尝试过:

label1.forget_grid()
label1.grid(rows=x, columns=y)
#Ive tried label1/frame.update after this code but it didnt do anything

我也尝试过不使用grid_forget。
我没有忘记frame.packroot.mainloop

有改变位置的功能吗?

2 个答案:

答案 0 :(得分:0)

这里是一个将标签的位置从第0列切换到第1列的示例:

您必须记住,.stage{ width:400px; height:300px; position:relative; } video{ -moz-transform:scale(1.5); -webkit-transform:scale(1.5); -o-transform:scale(1.5); -ms-transform:scale(1.5); transform:scale(1.5); } 几何管理器将未占用的行或列的大小设置为零像素。

按下按钮会使第1行中的标签从第0列交换到第1列,反之亦然。

@Component({
    selector: 'app-video',
    templateUrl: './video.component.html',
    styleUrls: ['./video.component.scss']

})
export class VideoComponent implements OnInit {

    v: number = 0;
    h: number = 0;

    constructor() {

    }

    ngOnInit() {
    }

    left(){
        this.v -= 5;
    }

    right(){
        this.v +=5;
    }
    up(){
        this.h -=5;
    }

    down(){
        this.h +=5;
    }
}

答案 1 :(得分:0)

我编写了一个包含标签和按钮的代码。当按下按钮时,标签的行从0更改为1,再次按下时,行从1更改为0,依此类推。为了使框架和根之间有所不同,我将框架的颜色设置为sky blue,将根的颜色设置为pink

from tkinter import *

global rw;rw = 0
def changed():
    global rw;rw += 1;
    if rw == 2:rw=0
    label.grid(row=rw,column=0)
root = Tk()
root.config(bg="pink")
frame = Frame(root, bg="sky blue")
frame.pack()

label = Label(frame,text="Hello")
label.grid(row=0,column=0)
b = Button(frame, text='Press me!', command=changed)
b.grid(row=0, column=1)

root.mainloop()

好吧,上面的代码有点复杂,所以,如果您想要一种更简单的方法来做同样的事情:

from tkinter import *

def changed():
    size = label.grid_info().get("row") #getting current row
    if size == 0:size = 1
    elif size == 1:size = 0
    label.grid(row=size,column=0)
root = Tk()
root.config(bg="pink")
frame = Frame(root, bg="sky blue")
frame.pack()

label = Label(frame,text="Hello")
label.grid(row=0,column=0)
b = Button(frame, text='Press me!', command=changed)
b.grid(row=0, column=1)

root.mainloop()

这是动画:
GIPHY