简体   繁体   中英

Center an image when resizing

Working with Tkinter, I need to center entities. When trying to center labels, it will only center it within the first row, and not the window.

I want it centered within the entire window. ie the middle. So far, it is only the middle of the top. is this possible?

Thanks.

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Image

root = Tk()

# New window, but text appears in the center of the center (the absolute center).
def whatsup():
    popup = Tk()
    popup.title("Cadillac")
    frame = Frame(popup)
    frame.pack()

    label = ttk.Label(frame, text="Wanna ride in my Cadillac?")
    label.pack()

root.title("I Love You")

# 1, 1
button = Button(root, text="Ayo girl", command=whatsup)
button.pack(side=LEFT)

# 1, 2, but to be 2, 2 soon after addition of new items.
canvas = Canvas(root, height=250, width=200)
imageOfCatherine=ImageTk.PhotoImage(Image.open('ccr_on_moon.jpg'))
canvas.create_image(-160, -100, anchor=NW, image=imageOfCatherine)
canvas.pack()

root.mainloop()

You can use grid instead of pack , with rowconfigure and columnconfigure methods like this :

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Image

root = Tk()
root.title("I Love You")

# New window, but text appears in the center of the center (the absolute center).
def whatsup():
    popup = Tk()
    popup.title("Cadillac")
    frame = Frame(popup)
    frame.pack()

    label = ttk.Label(frame, text="Wanna ride in my Cadillac?")
    label.pack()

# 1, 1
button = Button(root, text="Ayo girl", command=whatsup)
button.grid(row=0, column=0, sticky='w')

# 1, 2, but to be 2, 2 soon after addition of new items.
canvas = Canvas(root, height=250, width=200)
imageOfCatherine=ImageTk.PhotoImage(Image.open('ccr_on_moon.jpg'))
canvas.create_image(-160, -100, anchor=NW, image=imageOfCatherine)
canvas.grid(row=1, column=1)
root.rowconfigure([0,1,2], weight=1)
root.columnconfigure([0,1,2], weight=1)

root.mainloop()

Answer to comment

This also works, but it's not centered the same way :

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Image

root = Tk()
root.title("I Love You")

# New window, but text appears in the center of the center (the absolute center).
def whatsup():
    popup = Tk()
    popup.title("Cadillac")
    frame = Frame(popup)
    frame.pack()

    label = ttk.Label(frame, text="Wanna ride in my Cadillac?")
    label.pack()

# 1, 1
button = Button(root, text="Ayo girl", command=whatsup)
button.grid(row=0, column=0, sticky='w')

# 1, 2, but to be 2, 2 soon after addition of new items.
canvas = Canvas(root, height=250, width=200)
imageOfCatherine=ImageTk.PhotoImage(Image.open('ccr_on_moon.jpg'))
canvas.create_image(-160, -100, anchor=NW, image=imageOfCatherine)
canvas.grid(row=0, column=1, sticky='')

root.rowconfigure(0, weight=1)
root.columnconfigure([0,1], weight=1)

root.mainloop()

After some tinkering (no pun intended), I added expand=YES to frame.pack() in the whatsup() function.

def whatsup():
    popup = Tk()
    popup.title("Cadillac")
    frame = Frame(popup)
    frame.pack(expand=YES) # This was the changed line!

    label = ttk.Label(frame, text="Wanna ride in my Cadillac?")
    label.pack()

This allows for the popup text to become centered.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM