Найти - Пользователи
Полная версия: Помогите новичку разобраться с компоновкой виджетов в окне Tkinter
Начало » GUI » Помогите новичку разобраться с компоновкой виджетов в окне Tkinter
1
Pluto
Мне нужно чтобы при растягивании окна все виджеты оставались на своих местах, лишь виджеты lbl и txt должны расширяться по горизонтали. Я заставил виджет lbl не съезжать со своего места, но виджет txt упорно лезет центрироваться по вертикали. А кнопка btn2 тащится за нижнем краем окна. См. вложение.

Как их всех заставить подчиняться и сидеть на своих местах смирно? Попиксельное позиционирование, пожалуйста, не предлагайте.

 import tkinter as tk
class Window_main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Окно")
        self.padX = 2
        self.padY = 2
        
        self.frame1 = tk.Frame()
        self.frame1.pack(fill = "both")
        self.btn = tk.Button(master = self.frame1,
                                    text = "Кнопка",
                                    font = ("", "12", "bold"))
        self.btn.pack(side = "left", anchor = "n", padx = self.padX, pady = self.padY)
        self.lbl = tk.Label(master = self,
                            text = "",
                            font = "12",
                            relief = tk.SUNKEN,
                            width = 50,
                            anchor = "w",
                            bg = "white",
                            bd = 1)
        self.lbl.pack(side = "top", anchor = "n", fill = tk.X, expand = True, padx = self.padX, pady = self.padY)
        self.txt = tk.Text(master = self,
                           font = ("Courier New", "12"),
                           relief = tk.SUNKEN,
                           width = 50,
                           height = 11,
                           bg = "white",
                           bd = 1)
        self.txt.bind("<Key>", lambda a: "break")
        self.txt.pack(side = "top", anchor = "n", fill = tk.X, expand = True, padx = self.padX, pady = self.padY)
        self.btn2 = tk.Button(master = self,
                              font = ("", "12", "bold"),
                              text = "Кнопка2")
        self.btn2.pack(side = "left", anchor = "n", padx = self.padX, pady = self.padY)
if __name__ == "__main__":
    m = Window_main()
    m.mainloop()
xam1816
  
import tkinter as tk
class Window_main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Окно")
        self.padX = 2
        self.padY = 2
        self.frame1 = tk.Frame()
        self.frame1.pack(fill="both")
        self.btn = tk.Button(master=self.frame1,
                             text="Кнопка",
                             font=("", "12", "bold"))
        self.btn.pack(side="left", anchor="n", padx=self.padX, pady=self.padY)
        self.frame2 = tk.Frame()
        self.frame2.pack(fill='both')
        self.lbl = tk.Label(master=self.frame2,
                            text="",
                            font="12",
                            relief=tk.SUNKEN,
                            width=50,
                            anchor="w",
                            bg="white",
                            bd=1)
        self.lbl.pack(anchor="n", fill=tk.X, expand=True, padx=self.padX, pady=self.padY)
        self.frame3 = tk.Frame()
        self.frame3.pack(fill='both')
        self.txt = tk.Text(master=self.frame3,
                           font=("Courier New", "12"),
                           relief=tk.SUNKEN,
                           width=50,
                           height=11,
                           bg="white",
                           bd=1)
        self.txt.bind("<Key>", lambda a: "break")
        self.txt.pack(anchor="n", fill=tk.X, expand=True, padx=self.padX, pady=self.padY)
        self.btn2 = tk.Button(master=self,
                              font=("", "12", "bold"),
                              text="Кнопка2")
        self.btn2.pack(side="left", anchor="n", padx=self.padX, pady=self.padY)
if __name__ == "__main__":
    m = Window_main()
    m.mainloop()
Pluto
Т.е. для каждого виджета свой фрейм?
Всё равно не совсем соображаю, что именно влияет на позиционирование. Но, таки, будучи каждый в своём фрейме, виджеты выстроились так как мне надо.

Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB