代码之家  ›  专栏  ›  技术社区  ›  sanmacorz

如何在Tkinter上居中放置画布小部件

  •  0
  • sanmacorz  · 技术社区  · 2 年前

    我正在为一个项目学习tkinter,但我很难知道为什么我的布局不是我想要的那样。终端没有显示错误,所以我不认为缺少了一些参数或类似的内容。 This 是它目前的样子,我希望它是这样的 this

    谢谢

    import tkinter as tk
    import tkinter.ttk
    
    root = tk.Tk()
    root.geometry('1920x1080')
    root.configure(bg='blue')
    seleccion = tk.IntVar()
    seleccion.set(1)
    
    canvas_input = tk.Canvas(root, width='1280', height='720')
    canvas_input.configure(bg='white')
    canvas_input.place(anchor='center')
    
    tk.Label(root, text="Análisis meterológico").grid(row=0, column=1)
    tk.Label(root, text="Bienvenido a nuestro proyecto!").grid(row=1, column=1)
    
    entry1 = tk.Entry(root)
    
    def obtenerCiudad():
        ciudad = entry1.get()
        label1 = tk.Label(root, text= ciudad)
        canvas_input.create_window(400, 200, window=label1.grid(row=4, column=2))
    
    def ShowChoice():
        opcion = seleccion.get()
        label2 = tk.Label(root, text= opcion)
        canvas_input.create_window(400, 200, window=label2.grid(row=19, column=0))
    
    opciones = [("Coordenadas de la ubicación", 1),
            ("Velocidad del viento", 2),
            ("Humedad actual", 3),
            ("Temperatura actual", 4),
            ("Estado del clima", 5),
            ("Lluvia actual", 6),
            ("Nubosidad actual", 7),
            ("Luz ultra violeta", 8),
            ("Calidad del aire", 9),
            ("Estadisticas completas", 10),
            ("Salir del programa", 11)]
    
    canvas_input.create_window(400, 200, window=tk.Label(root, text="Qué desea consultar?").grid(row=2, column=0))
    rows = 3
    
    for opcion, val in opciones:
        rows += 1
        boton = tk.Radiobutton(root, text=opcion, variable=seleccion, command=ShowChoice, value=val).grid(row=rows, column=0)
        canvas_input.create_window(400, 200, window=boton)
        
    canvas_input.create_window(400, 200, window=tkinter.ttk.Separator(root, orient='vertical').grid(column=1, row=2, rowspan='19', sticky='ns'))
    canvas_input.create_window(400, 200, window=tk.Label(root, text="Ingrese la ciudad a la que desea consultar: ").grid(row=2, column=2))
    canvas_input.create_window(400, 200, window=entry1.grid(row=2, column=3))
    canvas_input.create_window(400, 200, window=tk.Button(text='Consultar', command=obtenerCiudad).grid(row=20, column=1))
    
    root.mainloop()
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Rory    2 年前

    如果要使用“中心”选项,则需要 relx rely 然后打电话 tk.CENTER 对于 anchor 。然后您必须更改小部件以进入 canvas_input 而不是 root

    import tkinter as tk
    import tkinter.ttk
    
    root = tk.Tk()
    root.geometry('1920x1080')
    root.configure(bg='blue')
    seleccion = tk.IntVar()
    seleccion.set(1)
    
    canvas_input = tk.Canvas(root, width='1280', height='720')
    canvas_input.configure(bg='white')
    canvas_input.place(relx=.5, rely=.5, anchor=tk.CENTER)
    
    tk.Label(canvas_input, text="Análisis meterológico").grid(row=0, column=1)
    tk.Label(canvas_input, text="Bienvenido a nuestro proyecto!").grid(row=1, column=1)
    
    entry1 = tk.Entry(canvas_input)
    
    def obtenerCiudad():
        ciudad = entry1.get()
        label1 = tk.Label(canvas_input, text= ciudad)
        canvas_input.create_window(400, 200, window=label1.grid(row=4, column=2))
    
    def ShowChoice():
        opcion = seleccion.get()
        label2 = tk.Label(canvas_input, text= opcion)
        canvas_input.create_window(400, 200, window=label2.grid(row=19, column=0))
    
    opciones = [("Coordenadas de la ubicación", 1),
            ("Velocidad del viento", 2),
            ("Humedad actual", 3),
            ("Temperatura actual", 4),
            ("Estado del clima", 5),
            ("Lluvia actual", 6),
            ("Nubosidad actual", 7),
            ("Luz ultra violeta", 8),
            ("Calidad del aire", 9),
            ("Estadisticas completas", 10),
            ("Salir del programa", 11)]
    
    canvas_input.create_window(400, 200, window=tk.Label(canvas_input, text="Qué desea consultar?").grid(row=2, column=0))
    rows = 3
    
    for opcion, val in opciones:
        rows += 1
        boton = tk.Radiobutton(canvas_input, text=opcion, variable=seleccion, command=ShowChoice, value=val).grid(row=rows, column=0)
        canvas_input.create_window(400, 200, window=boton)
        
    canvas_input.create_window(400, 200, window=tkinter.ttk.Separator(canvas_input, orient='vertical').grid(column=1, row=2, rowspan='19', sticky='ns'))
    canvas_input.create_window(400, 200, window=tk.Label(canvas_input, text="Ingrese la ciudad a la que desea consultar: ").grid(row=2, column=2))
    canvas_input.create_window(400, 200, window=entry1.grid(row=2, column=3))
    canvas_input.create_window(400, 200, window=tk.Button(canvas_input, text='Consultar', command=obtenerCiudad).grid(row=20, column=1))
    
    root.mainloop()