TKInter Entry не расширяется вместе с главным окном - PullRequest
0 голосов
/ 24 мая 2018

Я использую следующий код, у меня 2 проблемы: 1. Когда я пытаюсь развернуть окно, виджет «Ввод» не выравнивается / разворачивается вместе с основным окном и видит разрыв между прокручиваемым текстом и виджетом «Ввод».2. Во-вторых, я пытаюсь установить курсор в виджете «Ввод» при открытии или когда мое приложение активно, но по какой-то причине оно не работает.Любая идея, что я делаю ошибки?

import tkinter as tk
from tkinter import scrolledtext
class Main:
    def __init__(self, master):
        self.master = master
        master.title("Main")

        width = master.winfo_screenwidth()
        height = master.winfo_screenheight()

        master.minsize(width=1066, height=766)
        master.maxsize(width=width, height=height)
        self.frame = tk.Frame(self.master)

        text_area = scrolledtext.ScrolledText(self.master,width=75,height=35)
        text_area.pack(side="top",fill='both',expand=True)

        text_entry = tk.Entry(self.master,width=65)

        text_entry.pack(side="top",fill=X, expand=True,ipady=3, ipadx=3)
        text_entry.configure(foreground="blue",font=('Arial', 10, 'bold', 'italic'))

        text_entry.focus()
        self.frame.pack()

    def initial(self):
        print ("initializing")

def main(): 
    root = tk.Tk()
    app = Main(root)
    root.mainloop()

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 24 мая 2018

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

Это потому, что у вас есть fill=X, и это неверный ввод для заполнения.Вместо этого используйте fill="x".Я полагаю, что ваша вторая проблема с полем ввода, имеющим большой разрыв, заключается в том, что вместо этого вы установили expand = True вместо этого на expand = False.

При этом я предпочел вместо этого использовать диспетчер геометрии grid().Посмотрите на мой ниже пример того, как сделать это с сеткой и весами.

При использовании менеджера grid() вы можете указать каждому виджету, где именно вы хотите его видеть в сетке.Использование весов для указания строки или столбца, сколько, если таковые имеются, они должны расширяться с окном.Это в сочетании с sticky="nsew" поможет нам контролировать развертывание материалов в окне.

import tkinter as tk
from tkinter import scrolledtext


class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title("Main")

        width = self.winfo_screenwidth()
        height = self.winfo_screenheight()
        self.minsize(width=1066, height=766)
        self.maxsize(width=width, height=height)

        self.rowconfigure(0, weight=1)
        self.rowconfigure(1, weight=0)
        self.columnconfigure(0, weight=1)

        text_area = scrolledtext.ScrolledText(self,width=75,height=35)
        text_area.grid(row=0, column=0, ipady=3, ipadx=3, sticky="nsew")

        text_entry = tk.Entry(self,width=65)
        text_entry.grid(row=1, column=0, ipady=3, ipadx=3, sticky="ew")
        text_entry.configure(foreground="blue",font=('Arial', 10, 'bold', 'italic'))

        text_entry.focus()

    def initial(self):
        print ("initializing")

if __name__ == '__main__':
    root = Main()
    root.mainloop()

Обновление:

Чтобы прояснить вашу проблему с заполнением и расширением, я обновил ваш код с исправлениемтак что вы можете видеть, как это работает.

import tkinter as tk
from tkinter import scrolledtext
class Main:
    def __init__(self, master):
        self.master = master
        master.title("Main")

        width = master.winfo_screenwidth()
        height = master.winfo_screenheight()

        master.minsize(width=1066, height=766)
        master.maxsize(width=width, height=height)
        self.frame = tk.Frame(self.master)

        text_area = scrolledtext.ScrolledText(self.master,width=75,height=35)
        text_area.pack(side="top",fill='both',expand=True)

        text_entry = tk.Entry(self.master,width=65)

        text_entry.pack(side="top",fill="x", expand=False, ipady=3, ipadx=3)
        text_entry.configure(foreground="blue",font=('Arial', 10, 'bold', 'italic'))

        text_entry.focus()
        self.frame.pack()

    def initial(self):
        print ("initializing")

def main(): 
    root = tk.Tk()
    app = Main(root)
    root.mainloop()

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...