Tkinter 标签图像无边框
Tkinter Label image without border
这是我的第一个 post。我经常访问 stack overflow,我以前总能找到所有问题的答案,但今天不行。
我尝试在 window 中将图像显示为标签,但我认为 Tkinter 不会这样显示它们。换一种说法。我有几张小图片,它们应该并排放置,没有任何间隙。但是除了我所有的努力之外,Tkinter 总是在两个相邻元素之间放置小边框或间隙(可能是 1-2 像素)。
from tkinter import *
from tkinter import ttk
class MainWindow():
def __init__(self, mainWidget):
self.status_bar_text = StringVar()
self.status_bar_text.set('')
self.image_to_place = PhotoImage(file='my_image.png')
self.main_frame = ttk.Frame(mainWidget, width=768, height=480, padding=(0, 0, 0, 0))
self.main_frame.place(x=0, y=0)
self.status_bar = ttk.Label(mainWidget, width=768, border=1, anchor=W, relief=SUNKEN, textvariable=self.status_bar_text)
self.status_bar.place(x=0, y=480)
self.main_gui()
def main_gui(self):
i = 0
plate_cords = [[0, 0], [24, 0], [48, 0], [72, 0], [96, 0], [120, 0]]
for plate in plate_cords:
self.wall_label = ttk.Label(self.main_frame, image=self.image_to_place)
self.wall_label.place(x=plate_cords[i][0], y=plate_cords[i][1])
i += 1
del i
def main():
global root
root = Tk()
root.title('Title')
root.geometry('768x500+250+100')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
window = MainWindow(root)
window
root.mainloop()
if __name__ == '__main__':
main()
我尝试了 'borderwidth'、'padding'、'bordermode' 等选项和其他一些技巧,但似乎没有任何效果符合我的预期。感谢您的帮助和想法。
有两个属性需要设置为 0(零):borderwidth
和 highlightthickness
。 borderwidth
(与 relief
一起)定义了小部件的实际边框。 highlightthickness
还定义了各种边框——它是一个矩形环,当小部件获得焦点时可见。
对我来说,这个效果更好:
Label(..., state='normal')
我的图片宽度为 237x37 高度。
from tkinter import*
import tkinter as tk
from tkinter import font
top = Tk()
top.geometry("800x480")
top.title('FLOW')
C = Canvas(top, bg="#0026D1", height=480, width=800)
LabelsFont = font.Font(family='DejaVu Sans', size=10, weight='bold')
filenameLabel1 = PhotoImage(file = "/home/autorun/Desktop/pictures/štítok1.png")
Label1 = tk.Label(top, wraplength = 230, font=LabelsFont, fg="white", text="PRETLAK NA VSTUPE",image=filenameLabel1,borderwidth=0,compound="center",highlightthickness = 0,padx=0,pady=0)
Label1.place(x=15,y=90)
C.pack()
top.mainloop()
如果 Label1.place 宽度和高度中没有,则必须使用 pady=0、padx=0、borderwidth=0、highlightthickness = 0,或者必须使用 Label1.place 宽度和高度borderwidth=0,highlightthickness = 0 的图片。
我代码中的第二种方式:
Label1 = tk.Label(top, wraplength = 230, font=LabelsFont, fg="white", text="PRETLAK NA VSTUPE",image=filenameLabel1,borderwidth=0,compound="center",highlightthickness = 0)
Label1.place(x=15,y=90,width=237,height=37)
这是我的第一个 post。我经常访问 stack overflow,我以前总能找到所有问题的答案,但今天不行。
我尝试在 window 中将图像显示为标签,但我认为 Tkinter 不会这样显示它们。换一种说法。我有几张小图片,它们应该并排放置,没有任何间隙。但是除了我所有的努力之外,Tkinter 总是在两个相邻元素之间放置小边框或间隙(可能是 1-2 像素)。
from tkinter import *
from tkinter import ttk
class MainWindow():
def __init__(self, mainWidget):
self.status_bar_text = StringVar()
self.status_bar_text.set('')
self.image_to_place = PhotoImage(file='my_image.png')
self.main_frame = ttk.Frame(mainWidget, width=768, height=480, padding=(0, 0, 0, 0))
self.main_frame.place(x=0, y=0)
self.status_bar = ttk.Label(mainWidget, width=768, border=1, anchor=W, relief=SUNKEN, textvariable=self.status_bar_text)
self.status_bar.place(x=0, y=480)
self.main_gui()
def main_gui(self):
i = 0
plate_cords = [[0, 0], [24, 0], [48, 0], [72, 0], [96, 0], [120, 0]]
for plate in plate_cords:
self.wall_label = ttk.Label(self.main_frame, image=self.image_to_place)
self.wall_label.place(x=plate_cords[i][0], y=plate_cords[i][1])
i += 1
del i
def main():
global root
root = Tk()
root.title('Title')
root.geometry('768x500+250+100')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
window = MainWindow(root)
window
root.mainloop()
if __name__ == '__main__':
main()
我尝试了 'borderwidth'、'padding'、'bordermode' 等选项和其他一些技巧,但似乎没有任何效果符合我的预期。感谢您的帮助和想法。
有两个属性需要设置为 0(零):borderwidth
和 highlightthickness
。 borderwidth
(与 relief
一起)定义了小部件的实际边框。 highlightthickness
还定义了各种边框——它是一个矩形环,当小部件获得焦点时可见。
对我来说,这个效果更好:
Label(..., state='normal')
我的图片宽度为 237x37 高度。
from tkinter import*
import tkinter as tk
from tkinter import font
top = Tk()
top.geometry("800x480")
top.title('FLOW')
C = Canvas(top, bg="#0026D1", height=480, width=800)
LabelsFont = font.Font(family='DejaVu Sans', size=10, weight='bold')
filenameLabel1 = PhotoImage(file = "/home/autorun/Desktop/pictures/štítok1.png")
Label1 = tk.Label(top, wraplength = 230, font=LabelsFont, fg="white", text="PRETLAK NA VSTUPE",image=filenameLabel1,borderwidth=0,compound="center",highlightthickness = 0,padx=0,pady=0)
Label1.place(x=15,y=90)
C.pack()
top.mainloop()
如果 Label1.place 宽度和高度中没有,则必须使用 pady=0、padx=0、borderwidth=0、highlightthickness = 0,或者必须使用 Label1.place 宽度和高度borderwidth=0,highlightthickness = 0 的图片。
我代码中的第二种方式:
Label1 = tk.Label(top, wraplength = 230, font=LabelsFont, fg="white", text="PRETLAK NA VSTUPE",image=filenameLabel1,borderwidth=0,compound="center",highlightthickness = 0)
Label1.place(x=15,y=90,width=237,height=37)