zvepb
@zvepb

Как позиционировать виджеты tkinter?

Нужно подвинуть Entry к левому краю, а scrolledtext растянуть до конца окна вниз.

#!/usr/bin/env python
import os
import sys

import pyperclip
from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
from tkinter import filedialog as fd 


class MainWindow(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.init_main()

    def init_main(self):
        self.img_cache = []
        lb_dir = Label(bg="#dedede")
        lb_dir.pack(padx=60)
        self.edir = Entry(width=40, font="Alef 11", fg="black", bg="#ccc")
        self.edir.pack()
        self.paste_img = PhotoImage(file='3.png')
        self.btn_dir = tk.Button(text='open', fg="black", bg="#ccc", width=20, compound='left', command=self.callback)
        self.btn_dir.place(x=520, y=20)
        self.stop_img = PhotoImage(file='4.png')
        self.btn_stop = tk.Button(text='run', fg="black", bg="#ccc", width=60, height=1, compound='left', command=lambda: self.BMW(self.edir.get()))
        self.btn_stop.place(x=20, y=65)
        self.console = scrolledtext.ScrolledText(fg="black", bg="#ccc", bd=3, state='disable', font="Alef 9")
        self.console.pack(pady=100)

    def close_(self):
        sys.exit()

    def insert_to_console(self, text):
        self.console.configure(state='normal')  # enable insert
        self.console.insert(END, text)
        self.console.yview(END)  # autoscroll
        self.console.configure(state='disabled')

    def BMW(self, filename):
        self.insert_to_console(filename + "\n")

    def callback(self):
        self.edir.delete(0, END)
        self.name= fd.askopenfilename()
        self.edir.insert(0, self.name)

    def run_app():
        root = tk.Tk()
        root.resizable(width=False, height=False)
        MainWindow(root)
        root.title("BMW")
        root.geometry("620x500")
        root.configure(bg="#dedede")
        root.mainloop()


if __name__ == '__main__':
    bmw = MainWindow
    bmw.run_app()


Пробовал несколько способов, через pack() указывал координаты, но Entry просто выровнен по центру и не двигается. scrolledtext же меняется только если я меняю высоту главного окна.

Каким способом я могу позиционировать эти элементы в данном примере ?
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
@oneLEAM
Можно попробовать так:
self.edir.pack(side=TOP, anchor=W, padx=10)
и
self.console.pack(side=BOTTOM)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Если ты используешь менеджер pack(), используй параметр anchor для выравнивания вдоль другой оси. expand и fill - для заполнения вдоль другой оси.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы