我已经用tkinter建立了四个相关联窗口,怎么让每个窗口中输入框居中显示,并且字体大小自动适应
时间: 2024-05-11 21:13:57 浏览: 9
要让每个窗口中的输入框居中显示并自动适应字体大小,您可以使用以下代码:
```python
import tkinter as tk
class CenteredEntry(tk.Entry):
def __init__(self, master=None, **kw):
tk.Entry.__init__(self, master=master, **kw)
self.bind('<FocusIn>', self.on_focus_in)
self.bind('<FocusOut>', self.on_focus_out)
self.on_focus_out(None)
def on_focus_in(self, event):
self.config(justify='center')
def on_focus_out(self, event):
self.config(justify='left')
self.update_font()
def update_font(self):
text = self.get()
font = self['font']
size = font.split(' ')[-1]
while self.measure(text) > self.winfo_width():
size = int(size) - 1
font = font.split(' ')[:-1] + [str(size)]
self.configure(font=' '.join(font))
class MyWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("My Window")
# Create widgets
self.entry1 = CenteredEntry(self, font=('Helvetica', 20))
self.entry2 = CenteredEntry(self, font=('Helvetica', 20))
self.entry3 = CenteredEntry(self, font=('Helvetica', 20))
self.entry4 = CenteredEntry(self, font=('Helvetica', 20))
# Layout widgets
self.entry1.pack()
self.entry2.pack()
self.entry3.pack()
self.entry4.pack()
# Set focus to first entry
self.entry1.focus_set()
if __name__ == '__main__':
app = MyWindow()
app.mainloop()
```
在这个代码示例中,我们创建了一个名为`CenteredEntry`的子类,它继承自`tk.Entry`,并重写了`__init__`、`on_focus_in`、`on_focus_out`和`update_font`方法。在`__init__`方法中,我们绑定了`<FocusIn>`和`<FocusOut>`事件,以便在输入框获得焦点时将其文本居中显示,并在失去焦点时将其文本左对齐,并调用`update_font`方法以根据输入框的宽度自动调整字体大小。在`update_font`方法中,我们使用`measure`方法来计算输入框中文本的宽度,如果文本太宽,则降低字体大小。
在`MyWindow`类中,我们创建了四个`CenteredEntry`对象,并将它们添加到窗口中。我们还将第一个输入框设置为焦点。这样,当用户打开窗口时,第一个输入框将自动获得焦点,以便用户可以立即开始输入。
请注意,这个示例中使用的字体是`Helvetica`,大小为`20`。您可以根据需要更改字体和大小。