TKInter Entry不会与主窗口一起进行扩展

时间:2018-05-24 18:17:33

标签: python tkinter

我使用以下代码,我有2个问题, 1.当我尝试最大化窗口时,Entry小部件不与主窗口对齐/最大化,并且看到滚动文本和Entry小部件之间的间隙。 2.其次,当我尝试打开或每当我的应用程序处于活动状态但由于某种原因它无法正常工作时,我试图将我的光标设置在Entry小部件中。我有什么想法会犯错误吗?

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 :(得分:0)

我可以解决您的输入字段无法正常扩展的问题。

那是因为你有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()