我有这段代码。
class App(object):
def __init__(self):
self.root = Tk()
self.root.attributes('-zoomed', True)
self.root.grid_rowconfigure(0, weight=1)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_columnconfigure(1, weight=1)
f1 = Frame(self.root, bd=1, bg="green")
f3 = Frame(self.root, bd=1, bg="blue")
self.image = Image.open("default.png")
self.photo = ImageTk.PhotoImage(self.image)
self.label = Label(image=self.photo)
self.label.grid(row=0, column=1, sticky="nsew")
f1.grid(row=0, column=0, sticky="nsew")
f3.grid(row=1, column=0, columnspan=2, sticky="ew")
app = App()
app.root.mainloop()
如何让图像同等地占据左框架?
答案 0 :(得分:0)
在提供解决方案之前,我想强调一些评论:
f3
进行任何操作。运行程序时甚至不显示。所以我将在下面的解决方案中忽略它。-zoomed
设置了属性attributes
。我不知道你将使用它实现哪个目标。无论如何,有很多线程表明它只能运行Windows和一些像Ubuntu这样的Debian发行版。但是,我没有遇到这个问题,因为您可以阅读我在下面提供的第一个链接,这些参数是特定于平台的。因此,为了代码的可移植性,您可以使用-fullscreen
代替。但是在这里,特别是对于你的情况,它甚至会影响你的GUI的任务栏,它不会显示,因此你不能通过点击关闭按钮关闭你的程序。因此,在我的解决方案中,我宁愿使用winfo_screenheight()
和winfo_screenwidth()
将self.root
设置为机器屏幕的大小,并在geometry()
方法中调用它们。让我们将您的问题分成更小的问题:
您需要解决的第一个问题是如何将第一帧f1
和self.label
设置为相等的宽度?只需将每个宽度选项设置为屏幕宽度的一半即可完成此操作:width = self.root.winfo_screenwidth()/2
完成此操作后,您需要解决在评论中阐明的第二个问题。为此,您需要在图片上应用resize()
方法调整self.image
的大小以适合self.label
大小,并将图片的尺寸传递给它,该尺寸必须是您的标签尺寸以及常量PIL.Image.ANTIALIAS
。
所以这是完整的程序:
'''
Created on May 5, 2016
@author: billal begueradj
'''
import Tkinter as Tk
import PIL.Image
import PIL.ImageTk
class App(object):
def __init__(self):
self.root = Tk.Tk()
self.root.grid_rowconfigure(0, weight=1)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_columnconfigure(1, weight=1)
# Get width and height of the screen
self.h= self.root.winfo_screenheight()
self.w= self.root.winfo_screenwidth()
# Set the GUI's dimensions to the screen size
self.root.geometry(str(self.w) + "x" + str(self.h))
# Set the width of the frame 'f1' to the half of the screen width
self.f1 = Tk.Frame(self.root, bd=1, bg="green", width= self.w/2)
self.f1.grid(row=0, column=0, sticky="nsew")
# Load the image
self.image = PIL.Image.open("/home/Begueradj/mahomet_pedophile.jpg")
# Resize the image to fit self.label width
self.photo = PIL.ImageTk.PhotoImage(self.image)
self.label = Tk.Label(self.root, image=self.photo, width= self.w/2)
self.label.grid(row=0, column=1, sticky="nsew")
# Launch the main program
if __name__ == '__main__':
app = App()
app.root.mainloop()
你的评论有点不精确。它并不是说您希望整个图片看起来与框架f1
大小相同,或者只是它的附加标签(self.label
)。如果这是您想要做的,那么只需忽略上一个程序中的这一行:
self.image = self.image.resize((self.w/2, self.h), PIL.Image.ANTIALIAS)
<强>演示强>
输出将如下所示(图像只是位于标签的中心):