Как разместить кнопку слева в TkInter - PullRequest
0 голосов
/ 24 октября 2019

Я делаю простой интерфейс с TkInter в Python. Мне нужна кнопка в левом верхнем углу, поэтому я сделал что-то вроде

    back = Button(explorer, text="Back")
    back.pack(side="top", anchor="w")

, где explorer - это рамка, и я ожидал увидеть кнопку в левом верхнем углу, но она застряла в центре. Какие-либо предложения? Я уже пытался добавить side=TOP, но это не сработало. Какой правильный способ сделать это?

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Как уже упоминалось выше, ваш родительский фрейм должен заполнить пространство x. Это пример родительского фрейма, не заполняющего x:

import tkinter as tk

root = tk.Tk()
root.geometry('200x200')

element = tk.Frame(root)
element.pack() # No fill

tk.Button(element, text='No Fill').pack(anchor='w')

# To show the fill
tk.Label(root, text='Fill X', bg='green').pack(fill='x')

root.mainloop()

. В результате кнопка находится в центре, несмотря на привязку: https://i.stack.imgur.com/DAgmH.png

Но внесите это изменение:

element.pack(fill='x')

И теперь ваша кнопка будет в левом верхнем углу, как здесь: https://i.stack.imgur.com/HoGGj.png

0 голосов
/ 24 октября 2019

Tkinter имеет 3 модуля для установки элементов: .pack, который помещает все более или менее случайным образом. Сетка, где вы можете определить строку и столбец. Место, где вы определяете все в пикселях

, чтобы вы могли использовать что-то вроде

import tkinter as tk
from tkinter import *

root = Tk()

button = Button(text = 'back')
button.grid(row = 1, column = 1)


root.mainloop()

Здесь показано, как использовать функцию .grid. Имейте в виду, что размер каждой сетки определяется ее наибольшим содержанием. Если у вас длинное поле ввода, столбец, в который он помещен, будет таким же широким, как и запись.

Вы также можете использовать функцию .place, но этот требует больше всего работы. Для меня это всегда угадывать и повторять, пока я им не доволен.

import tkinter as tk
from tkinter import *

root = Tk()

button = Button(text = 'back')

root.geometry("150x100")
button.place(x=30, y=30)


root.mainloop()

Итак, в общем, используйте .pack, если вам все равно, .grid, если вам нужен какой-то контроль, и .place, если вы хотитебыть точнымИ имейте в виду, чтобы использовать только ОДИН за один раз.

0 голосов
/ 24 октября 2019

Ваш кадр должен занимать все горизонтальное пространство, если вы хотите выровнять его дочерние элементы. Что-то вроде (если вы импортировали элементы tkinter с from tkinter import *):

explorer.pack(fill=X)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...