Python 为什么文本不显示在标签上?

Python 为什么文本不显示在标签上?,python,tkinter,label,Python,Tkinter,Label,如果我手动放大窗口,我会看到文本,所以文本就在那里!(在标签上)但如果不放大窗口,我看不见,我只看到一块标签 我怎样才能修好它?我必须调整尺寸吗 我尝试过改变字体大小、标签大小和其他一些事情,但我甚至无法解决这个问题 代码如下: from Tkinter import * import ttk import time import threading def start(): start_stop.config(text="QUIT", command=stop, image=phot

如果我手动放大窗口,我会看到文本,所以文本就在那里!(在标签上)但如果不放大窗口,我看不见,我只看到一块标签

我怎样才能修好它?我必须调整尺寸吗

我尝试过改变字体大小、标签大小和其他一些事情,但我甚至无法解决这个问题

代码如下:

from Tkinter import *
import ttk
import time
import threading

def start():
    start_stop.config(text="QUIT", command=stop, image=photo2)
    thread = threading.Thread(target=progBar, args=())
    thread.daemon = True
    thread.start()

def progBar():
    for i in xrange(300):
        if i < 50:
            lbl1.config(height=0, width=4, font=('times', 400, 'bold'),
                        text="AAAA!!")     
            lbl1.config(fg='black')

            if i % 5:
                lbl1.config(bg='white')
            else:
                lbl1.config(bg='red')

        if i == 50:
            lbl1.destroy()

        if i >= 200:
            s = ttk.Style()
            s.theme_use('clam')
            if i % 5:
                s.configure("red.Horizontal.TProgressbar", 
                            foreground='#205F8C', background='#205F8C')
            else:
                s.configure("red.Horizontal.TProgressbar", 
                            foreground='red', background='red')
            pbar_det.config(style="red.Horizontal.TProgressbar")

        pbar_det.step(0.33)
        master.update()
        # Busy-wait
        time.sleep(0.1)

    master.destroy()

def stop():
    master.destroy()

master = Tk()
photo1 = PhotoImage(file="Press1.gif")
photo2 = PhotoImage(file="Press2.gif")
ws = master.winfo_screenwidth() # width of the screen
hs = master.winfo_screenheight() # height of the screen

width = ws
height = 120
x = ws-width # Window's coords
y = hs-height

start_stop = Button(master, text='START', command=start, image=photo1)
start_stop.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S)

pbar_det = ttk.Progressbar(master, orient="horizontal", length=ws-450,
                           mode="determinate")
pbar_det.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S)

lbl1 = Label(master)
lbl1.grid(row=0, column=1, pady=2, padx=2)
lbl2 = Label(master)
lbl2.grid(row=0, column=1, pady=2, padx=2)

master.geometry('%dx%d+%d+%d' % (width, height, x, y))
master.mainloop()
从Tkinter导入*
导入ttk
导入时间
导入线程
def start():
start\u stop.config(text=“QUIT”,command=stop,image=photo2)
thread=threading.thread(target=progBar,args=())
thread.daemon=True
thread.start()
def progBar():
对于X范围内的i(300):
如果i<50:
lbl1.config(高度=0,宽度=4,字体=('times',400,'bold'),
text=“AAAA!!”)
lbl1.config(fg='black')
如果我是%5:
lbl1.config(bg='white')
其他:
lbl1.config(bg='red')
如果i==50:
lbl1.destroy()
如果i>=200:
s=ttk.Style()
s、 主题使用(“蛤蜊”)
如果我是%5:
s、 配置(“red.Horizontal.TProgressbar”,
前景='#205F8C',背景='#205F8C')
其他:
s、 配置(“red.Horizontal.TProgressbar”,
前景(红色),背景(红色)
pbar_det.config(style=“red.Horizontal.TProgressbar”)
pbar_det.阶跃(0.33)
master.update()
#忙等
睡眠时间(0.1)
毁灭大师
def stop():
毁灭大师
master=Tk()
photo1=PhotoImage(file=“Press1.gif”)
photo2=PhotoImage(file=“Press2.gif”)
ws=master.winfo_screenwidth()#屏幕宽度
hs=master.winfo_屏幕高度()#屏幕高度
宽度=ws
高度=120
x=ws宽度#窗口坐标
y=hs高度
启动\停止=按钮(主控,文本='start',命令=启动,图像=照片1)
开始和停止网格(行=0,列=1,pady=2,padx=2,粘性=E+W+N+S)
pbar_det=ttk.Progressbar(主控,方向=“水平”,长度=ws-450,
mode=“determinate”)
pbar_det.grid(行=0,列=0,pady=2,padx=2,粘性=E+W+N+S)
lbl1=标签(主标签)
lbl1.grid(行=0,列=1,pady=2,padx=2)
lbl2=标签(主标签)
lbl2.grid(行=0,列=1,pady=2,padx=2)
master.geometry(“%dx%d+%d+%d%”(宽度、高度、x、y))
master.mainloop()

尝试将标签内的文本锚定到左侧

lbl1.config(anchor="nw") # nw = north-west = top left

我发现代码中至少有四个问题:

from Tkinter import *
import ttk
import time
import threading

def start():
    start_stop.config(text="QUIT", command=stop, image=photo2)
    thread = threading.Thread(target=progBar, args=())
    thread.daemon = True
    thread.start()

def progBar():
    for i in xrange(300):
        if i < 50:
            lbl1.config(height=0, width=4, font=('times', 400, 'bold'),
                        text="AAAA!!")     
            lbl1.config(fg='black')

            if i % 5:
                lbl1.config(bg='white')
            else:
                lbl1.config(bg='red')

        if i == 50:
            lbl1.destroy()

        if i >= 200:
            s = ttk.Style()
            s.theme_use('clam')
            if i % 5:
                s.configure("red.Horizontal.TProgressbar", 
                            foreground='#205F8C', background='#205F8C')
            else:
                s.configure("red.Horizontal.TProgressbar", 
                            foreground='red', background='red')
            pbar_det.config(style="red.Horizontal.TProgressbar")

        pbar_det.step(0.33)
        master.update()
        # Busy-wait
        time.sleep(0.1)

    master.destroy()

def stop():
    master.destroy()

master = Tk()
photo1 = PhotoImage(file="Press1.gif")
photo2 = PhotoImage(file="Press2.gif")
ws = master.winfo_screenwidth() # width of the screen
hs = master.winfo_screenheight() # height of the screen

width = ws
height = 120
x = ws-width # Window's coords
y = hs-height

start_stop = Button(master, text='START', command=start, image=photo1)
start_stop.grid(row=0, column=1, pady=2, padx=2, sticky=E+W+N+S)

pbar_det = ttk.Progressbar(master, orient="horizontal", length=ws-450,
                           mode="determinate")
pbar_det.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S)

lbl1 = Label(master)
lbl1.grid(row=0, column=1, pady=2, padx=2)
lbl2 = Label(master)
lbl2.grid(row=0, column=1, pady=2, padx=2)

master.geometry('%dx%d+%d+%d' % (width, height, x, y))
master.mainloop()
  • 调用
    master.geometry(…)
    时,您正在将小部件的大小强制设置为特定的高度。这可以防止窗口增长或收缩以适应内部小部件
  • 您正在指定一个非常大的字体(400点),它不能适应您选择的高度。由于字体相对于您指定的空间(通过明确设置窗口高度)的大小很大,因此您看到的是所有字体中字母上方的自然空白)
  • 您将两个标签和一个按钮放在同一行和同一列的顶部
  • 您正在使用线程。Tkinter不是线程安全的。您的代码可能会工作,但可能不会

如果删除对
master.geometry()
的调用,窗口将展开以适应文本的高度。或者,你不能让字体这么大

谢谢你的回答!但这并不能解决问题。问题与此完全相同。您做了哪些调试工作?您是否验证了您对宽度和高度的计算是否符合预期?此外,您是否有意将两个按钮加上两个图像放在同一位置(第0行第1列)?