Может ли кто-нибудь объяснить и помочь мне понять, как форматирование виджетов работает в Tkinter - PullRequest
1 голос
/ 06 мая 2020

Я просто возился с Tkinter, пытаясь создать базовую систему ввода имен c. Мне трудно понять несколько вещей:

  • Почему, независимо от того, где я пытаюсь привязать метку к сетке, она всегда остается в верхнем левом углу? Как мне это сделать, чтобы я мог «свободно размещать» метку вокруг окна вместо того, чтобы просто оставаться в этом фиксированном положении?
  • У меня есть базовое c понимание:

    root.grid_rowconfigure(0, weight=1)
    
    root.grid_columnconfigure(0, weight=1)
    

Однако что означают различные параметры и что их изменение на самом деле делает для программы.

  • Есть ли способ поместить текст в верхний центр окна и убедиться, что он остается там, что-то вроде заголовка внутри самого окна. Я понимаю, что это может быть достигнуто с помощью заполнения, но заполнение не позволяет тексту оставаться в центре при изменении размера окна

Было бы здорово, если бы кто-то мог объяснить это, или даже только один , мне. Спасибо :)

    from tkinter import *

    fname = open("fname.txt", "a")


    root = Tk()
    root.title("First Name")
    root.geometry("500x300")

    main_frame = Frame(root, bg="#CECECE", width=490, height=245)

    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)

    main_frame.grid(row=0, sticky="nsew")

    firstName = Label(main_frame, text="First Name")
    firstName.grid(column=2, row=2)

    root.mainloop()

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Почему, независимо от того, где я пытаюсь разместить метку, она всегда остается в верхнем левом углу?

Это потому, что пустые строки и пустые столбцы имеют размер нуль.

Как мне это сделать, чтобы я мог «свободно размещать» метку вокруг окна, вместо того, чтобы просто оставаться в этом фиксированном положении?

TO «свободно позиционировать» виджет, который вы можете использовать place. Он отлично подходит для размещения виджетов именно там, где вы хотите. Обратной стороной является то, что вы должны выполнять все вычисления и заботиться о том, что произойдет, если размер windows изменится, шрифты будут другими и т. Д. c. place хорошо подходит для абсолютного позиционирования (и даже для относительного), но обычно это приводит к тому, что вам нужно выполнять больше работы, и в итоге получается менее отзывчивый интерфейс.

У меня базовый c понимание root.grid_rowconfigure(0, weight=1) ... Однако что означают различные параметры и что их изменение на самом деле делает для программы.

Первый параметр - это номер строки или столбца, который должен быть настроен . Параметр weight - это относительное число, которое сообщает tkinter, как выделить дополнительное пространство относительно других строк и столбцов. Если есть нераспределенное пространство , оно будет распределено по строкам и столбцам с ненулевым весом.

Например, если один столбец имеет вес 2, а другой - 1, столбец с весом 2 получит вдвое больше дополнительного пространства. То же самое верно, если бы веса были 20 и 10 или 2000 и 1000.

Есть ли способ поместить текст в верхний центр окна и убедиться, что он остается там?

Есть несколько способов, но ответ для того, чтобы сделать это только с одной меткой во всем окне, будет отличаться от метки вверху и других вещей внизу. С сеткой вы должны учитывать поведение всех строк и столбцов. У вашего вопроса нет заголовка, поэтому дать конкретный совет c сложно.

0 голосов
/ 06 мая 2020

На вашем месте я бы не использовал .grid(). Вместо этого используйте .place(). Вы можете разместить виджет практически в любом месте экрана с помощью этого менеджера геометрии, и он имеет дополнительное преимущество в виде уменьшения масштаба при уменьшении экрана. Например:

button1 = Button()
button1.place(relx = 0.5, rely = 0.5, anchor = "center")

Это поместит кнопку в центр экрана, независимо от того, насколько вы уменьшите экран.

Подробнее о менеджере геометрии места .

Надеюсь, это поможет!

Кроме того, пакет и сетка не могут работать вместе в одном мастере, потому что программа будет вечно пытаться найти решение, которое будет работать для обоих менеджеров геометрии. Убедитесь, что если вы используете сетку, то придерживайтесь ее.

...