You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Tkinter中f(x)=标签与Entry组件并排且屏幕居中显示?

问题描述

需要将Tkinter中的“f(x)=”标签(L1)与输入框(Entry组件)并排放置,同时让它们处于屏幕中心。试过pack方法,也用了place方法——place能实现效果,但在不同屏幕尺寸的设备上会错位,没法用。现有代码如下:

from tkinter import*
from matplotlib import pyplot as plt
from numpy import*

t = Tk()
def odust():
    t.destroy()
    return
def prikaz():
    x = linspace(-20, 20)
    plt.ylim(-20,20)
    plt.plot(x, eval(str(E.get())), linewidth=1, color="black")
    yaxis=range(-20,20)
    xaxis=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    plt.plot(xaxis,yaxis,linewidth=0.5,color="black")
    plt.plot(x,x*0,linewidth=0.5,color="black")
    plt.show()
    return
t.attributes('-fullscreen', True)
t.config(bg="white")
xbutton = Button(t, text=" X ", bg="red", fg="white", font=("Goudy stout", 16), command=lambda:[odust()])
xbutton.pack(side="top", anchor="ne")
L=Label(t, text="Upišite u sivo polje funkciju grafa\nkoji želite prikazati.\n(Nap. razlomke pišite kao (a+b)/c)\n(Kod umnoska pišite '*', npr 3*x)",bg="white", fg="black",font=("Goudy Stout", 18))
L.pack(side="top", pady=20)
natrag=Button(t, text="Natrag", bg="black",fg="white", font=("Goudy stout", 16) ,command=lambda:[odust()])
natrag.pack(side="bottom", pady=20)
prikazgraf=Button(t, text="Prikaži graf", fg="white", bg="black",font=("Goudy stout", 16),command=lambda:[prikaz()])
prikazgraf.pack(side="bottom",pady=20)
L1 = Label(t, text="f(x)=", bg="white", fg="black", font=("Goudy Stout", 12))
L1.pack(side="left", anchor="center", pady=20)
E=Entry(t, bg="gray", fg="black",font=("Goudy Stout", 12))
E.pack(side="left", anchor="center", pady=20)
t.mainloop()
解决方案

用Frame容器包裹标签和输入框,再将这个Frame在主窗口居中,就能实现组件并排且自适应不同屏幕的需求。修改后的代码如下:

from tkinter import*
from matplotlib import pyplot as plt
from numpy import*

t = Tk()
def odust():
    t.destroy()
    return
def prikaz():
    x = linspace(-20, 20)
    plt.ylim(-20,20)
    plt.plot(x, eval(str(E.get())), linewidth=1, color="black")
    yaxis=range(-20,20)
    xaxis=[0]*40  # 简化原xaxis的写法,效果一致
    plt.plot(xaxis,yaxis,linewidth=0.5,color="black")
    plt.plot(x,x*0,linewidth=0.5,color="black")
    plt.show()
    return
t.attributes('-fullscreen', True)
t.config(bg="white")
xbutton = Button(t, text=" X ", bg="red", fg="white", font=("Goudy stout", 16), command=lambda:[odust()])
xbutton.pack(side="top", anchor="ne")
L=Label(t, text="Upišite u sivo polje funkciju grafa\nkoji želite prikazati.\n(Nap. razlomke pišite kao (a+b)/c)\n(Kod umnoska pišite '*', npr 3*x)",bg="white", fg="black",font=("Goudy Stout", 18))
L.pack(side="top", pady=20)
natrag=Button(t, text="Natrag", bg="black",fg="white", font=("Goudy stout", 16) ,command=lambda:[odust()])
natrag.pack(side="bottom", pady=20)
prikazgraf=Button(t, text="Prikaži graf", fg="white", bg="black",font=("Goudy stout", 16),command=lambda:[prikaz()])
prikazgraf.pack(side="bottom",pady=20)

# 新增Frame容器,用于包裹标签和输入框
input_frame = Frame(t, bg="white")
input_frame.pack(expand=True)  # 让Frame在窗口中居中,自动适配屏幕

L1 = Label(input_frame, text="f(x)=", bg="white", fg="black", font=("Goudy Stout", 12))
L1.pack(side="left", padx=(0, 5))  # 标签居左,右侧留5px间距增强可读性
E=Entry(input_frame, bg="gray", fg="black",font=("Goudy Stout", 12))
E.pack(side="left")

t.mainloop()

修改说明

  1. 新增input_frame作为容器,将L1和E放入其中,保证两者相对位置固定。
  2. input_frame.pack(expand=True)让Frame在主窗口中自动扩展并居中,无论屏幕尺寸如何变化,都能保持整体居中。
  3. 标签和输入框在Frame内用side="left"实现并排,通过padx调整间距,优化布局美观度。
  4. 顺便简化了原代码中xaxis的写法,用[0]*40替代重复的0,效果一致且更简洁。

内容的提问来源于stack exchange,提问作者RapidDog65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:00:59