Python Tkinter如何显示图像而不移动任何内容?

Python Tkinter如何显示图像而不移动任何内容?,python,tkinter,Python,Tkinter,这是我当前的Python代码: from tkinter import * import glob import os from PIL import Image, ImageTk import tkinter as tk root = tk.Tk() root.title("SIGN OFF") root.minsize(840, 800) # Add a grid mainframe = tk.Frame(root) mainframe.columnconfigure(0, weigh

这是我当前的Python代码:

from tkinter import *
import glob
import os
from PIL import Image, ImageTk
import tkinter as tk


root = tk.Tk()
root.title("SIGN OFF")
root.minsize(840, 800)

# Add a grid
mainframe = tk.Frame(root)
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
mainframe.pack(pady=100, padx=100)

# Create a Tkinter variable
tkvar = tk.StringVar(root)

directory = "C:/Users/eduards/Desktop/work/data/to-do"
choices = glob.glob(os.path.join(directory, "*.jpg"))
tkvar.set('...To Sign Off...') # set the default option

popupMenu = tk.OptionMenu(mainframe, tkvar, *choices)
tk.Label(mainframe, text="Choose your sign off here:").grid(row=1, column=1)
popupMenu.grid(row=2, column=1)

label2 = tk.Label(mainframe, image=None)
label2.grid(row=4, column=0)

# On change dropdown callback.
def change_dropdown(*args):
    """ Updates label2 image. """
    imgpath = tkvar.get()
    img = Image.open(imgpath)
    img = img.resize((240,250))
    photo = ImageTk.PhotoImage(img)
    label2.image = photo
    label2.configure(image=photo)


tk.Button(mainframe, text="Open", command=change_dropdown).grid(row=3, column=1)

var1 = IntVar()
Checkbutton(mainframe, text="Ingredients present in full (any allergens in bold with allergen warning if necessary)", variable=var1).grid(column = 2, row=1, sticky=W)
var2 = IntVar()
Checkbutton(mainframe, text="May Contain Statement.", variable=var2).grid(column = 2, row=2, sticky=W)
var3 = IntVar()
Checkbutton(mainframe, text="Cocoa Content (%).", variable=var3).grid(column = 2, row=3, sticky=W)
var4 = IntVar()
Checkbutton(mainframe, text="Vegetable fat in addition to Cocoa butter", variable=var4).grid(column = 2, row=4, sticky=W)
var5 = IntVar()
Checkbutton(mainframe, text="Instructions for Use.", variable=var5).grid(column = 2, row=5, sticky=W)
var6 = IntVar()
Checkbutton(mainframe, text="Additional warning statements (pitt/stone, hyperactivity etc)", variable=var6).grid(column = 2, row=6, sticky=W)
var7 = IntVar()
Checkbutton(mainframe, text="Nutritional Information Visible", variable=var7).grid(column = 2, row=7, sticky=W)
var8 = IntVar()
Checkbutton(mainframe, text="Storage Conditions", variable=var8).grid(column = 2, row=8, sticky=W)
var9 = IntVar()
Checkbutton(mainframe, text="Best Before & Batch Information", variable=var9).grid(column = 2, row=9, sticky=W)
var10 = IntVar()
Checkbutton(mainframe, text="Net Weight & Correct Font Size.", variable=var10).grid(column = 2, row=10, sticky=W)
var11 = IntVar()
Checkbutton(mainframe, text="Barcode - Inner", variable=var11).grid(column = 2, row=11, sticky=W)
var12 = IntVar()
Checkbutton(mainframe, text="Address & contact details correct", variable=var12).grid(column = 2, row=12, sticky=W)


root.mainloop()
给我这个的输出:

我遇到的问题是,当我选择一个目录,打开它延伸出所有其他内容的图像时,我想知道,如何将图像放置在复选框旁边而不移动复选框内容

以下是输出:

这是我打算使用paint进行编辑的输出:

您需要将rowspan选项添加到label2变量中,如下所示:

label2.grid(row = 4, column = 0, rowspan = 10)

编辑rowspan值以获得所需结果

看起来您的窗口应该由两个独立的列组成。可以通过嵌套框架对象来实现这一点。从主框架开始,将两个框架并排放置,如下所示:

mainframe=tk.Frameroot 在此处配置主框架 leftframe=tk.Framemainframe leftframe.gridrow=0,column=0 rightframe=tk.Framemainframe rightframe.gridrow=0,column=1 现在您可以继续放置您的小部件了。例如:

菜单和标签应该在左列 tk.labelleftrame,text=在此处选择您的注销:.gridrow=0,column=0 popupMenu=tk.OptionMenuleftframe,tkvar,*选项 ... 但是你想要右边的复选框 var1=IntVar Checkbuttonrightframe,text=全部成分所有过敏原以粗体显示,必要时带有过敏原警告,变量=var1。gridrow=0,column=0,sticky=W ...
请注意我对行和列参数所做的更改。当然,如Eduard所提到的,阅读文档,

如果你在Topto添加了一个工作代码,一眼就能看到所有的Itvar,那就更好了。你可以用这个:我在Range1,13:ExcVa+Stru+= ItVal..…或者,考虑给你的变量名。var4很少是个好主意,使用vegetableFatFlag.Works和column=1时,代码可能更易于管理。编辑rowspan没有多大作用OP面临的问题更多地与Tkinter栅格几何体有关。OP需要图像跨越不同的行,而不是填充单个行。因此,rowspan应能立即产生一个理想的结果: