【问题标题】:cannot use geometry manager pack inside error tkinter无法在错误 tkinter 中使用几何管理器包
【发布时间】:2020-05-18 22:24:07
【问题描述】:

我是新的 tkinter。我想将图像添加到我的程序中。但是我犯了一个错误:不能在里面使用几何管理器包。已经有网格管理的奴隶。如果我单独运行此代码,它正在工作。我可以获得图像并且程序正在运行。但是,如果我同时运行图像和功能,它就不起作用。怎么解决?

from tkinter import *
from PIL import ImageTk,Image
import tkinter as tk
from functools import partial
root=tk.Tk()
root.geometry("900x900+100+200")
root.title("Converter")
root.configure(background="grey")
root.resizable(width=False,height=False)
lenghtVal="Lenght"
def store_lenght(sel_lenght):
  global lenghtVal
  lenghtVal=sel_lenght
def call_result(rL,inputn):
 lenght=inputn.get()
 if lenghtVal=="Angström-Milimetre":
    mm=float((float(lenght)*10**-7))
    rL.config(text="% f milimetre" % mm)

 if lenghtVal=="Yard-Metre":
    m=float((float(lenght)*0.9144))
    rL.config(text="% f metre" % m)


 if lenghtVal=="Inch-Metre":      
    m=float((float(lenght)*0.0254))
    rL.config(text="% f metre" % m)

 if lenghtVal=="Mil-Metre":
    km=float((float(lenght)*1.6903))
    rL.config(text="% f kilometre" % km)
 return
numberInput=tk.StringVar()
var=tk.StringVar()
input_label=tk.Label(root,text="Enter",background="white",foreground="black")
input_entry=tk.Entry(root,textvariable=numberInput)
input_label.grid(row=0)
input_entry.grid(row=0,column=1)
rLabel=tk.Label(root,text="0.0",background="white")
rLabel.grid(row=4,columnspan=2)
call_result=partial(call_result,rLabel,numberInput)

result_button=tk.Button(root,text="convert",command=call_result,background="white",foreground="black")
result_button.grid(row=2,columnspan=2)
dropdownList=["-Uzunluk Ölçüleri-","Angström-Milimetre","Yard-Metre","Inch-Kilometre","Mil-Metre"]
dropdown=tk.OptionMenu(root,var,*dropdownList,command=store_lenght)
dropdown.grid(row=0,column=2)
var.set(dropdownList[0])

root=Tk()

root.geometry("1255x944")
image=Image.open("C:\\Users\\Asus\\Desktop\\6.png")
photo=ImageTk.PhotoImage(image)
label=Label(image=photo)
label.pack()
root.mainloop()

【问题讨论】:

  • 您不能在一个窗口或一个窗口小部件中混合管理 pack()grid(),因为两者都使用自动计算来组织窗口/窗口小部件中的元素,并且当一个管理者移动元素时,另一个管理者必须重新计算定位和移动元素,这意味着首先必须再次重新计算元素并移动它们等。但是您可以将frameframe 放在内部,然后在frame 外部使用不同的管理器。或者您必须仅使用 pack() 或仅使用 grid() 来放置所有小部件。
  • 应避免Tk() 的多个实例。

标签: python tkinter


【解决方案1】:

在 tkinter 中,.grid().pack() 不能在同一个窗口中使用。要解决此问题,您必须选择仅使用.grid.pack()

快结束时,你写了label.pack()。相反,请使用 label.grid(row=5) 或任何您想放置标签的位置。

如果您仍想同时使用两者,您可以将所有使用 .grid() 的小部件放入 Frame 小部件中。然后,您可以打包两个框架。

【讨论】:

  • “在 tkinter 中,.grid() 和 .pack() 不能在同一个窗口中使用。” 从字面上看是错误的陈述。只要它们不都用于具有相同父级的小部件,它们就可以在同一个窗口中使用。事实上,通常认为在窗口中同时使用这两种方法是一种最佳做法,因为它们各自擅长于不同类型的布局
猜你喜欢
  • 2020-07-10
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多