【问题标题】:How to prevent a gap between two canvas in python如何防止python中两个画布之间的间隙
【发布时间】:2016-05-30 17:10:23
【问题描述】:

此代码在一个窗口中生成两个画布。然而,Python 不会将它们彼此粘在一起,而是在它们之间放置一个间隙。当我调整窗口大小时,这个差距会变得更大。

from Tkinter import *

class App:
    def __init__(self,master):

       master.title('Python Canvas Testing')
       master.minsize(width=550, height=450)

       settingscanvas = Canvas(master,bg="yellow")
       settingscanvas.pack(side='top',anchor='nw',expand=True,fill='x')

       datacanvas = Canvas(master,bd=1,bg="green")
       datacanvas.pack(side='top',anchor='nw',expand=True,fill='both')

       for r in xrange(15):
          Label(settingscanvas, text='Label'+str(r+1)).grid()

       Label(datacanvas, text='Label 2').grid()

## create main program window
window = Tk()

## create window container
app = App(window)

mainloop()

我想念将两张画布粘在一起以确保没有间隙的任何选项吗?

【问题讨论】:

  • @TadhgMcDonald-Jensen:混合packgrid 不仅是可能的,而且是一种很好的做法。唯一不能做到这一点的是两个或多个共享一个共同父级的小部件。在这种情况下,小部件有不同的父级。
  • 我没有注意到它们在不同的父小部件中,我完全收回了我原来的评论。

标签: python tkinter pack tkinter-canvas


【解决方案1】:

两个小部件都将expand 设置为True,因此它们都被分配了一些额外的空间。如果您只希望其中一个获得额外空间,请将另一个设置为 expandFalse。如果您希望它们都获得一些额外的空间,请务必将 fill 设置为包含 y 方向。

【讨论】:

  • 谢谢,这很有帮助。由于在我的应用程序中,第一个画布的内容没有改变,我可以将其设置为 expand=False,现在有了我想要的行为。我的印象是“填充”需要“expand=True”,但显然不是。
【解决方案2】:

我不知道如何使它与包一起使用。但是您可以使用网格管理器来完成。要拥有带有网格的可扩展小部件,您需要设置两件事。首先,“sticky”参数允许小部件填充网格中他的单元格内的空间('ew' 水平填充,'nsew' 填充两个方向)。其次,列和/或行的权重参数如果为正则使其可消耗。

from tkinter import *

class App:
    def __init__(self,master):
       master.title('Python Canvas Testing')
       master.minsize(width=550, height=450)

       settingscanvas = Canvas(master,bg="yellow")
       settingscanvas.grid(sticky='ew')

       datacanvas = Canvas(master,bd=1,bg="green")
       datacanvas.grid(sticky='nsew')

       master.grid_rowconfigure(1,weight=1)
       master.grid_columnconfigure(0, weight=1)

       for r in range(15):
          Label(settingscanvas, text='Label'+str(r+1)).grid()

       Label(datacanvas, text='Label 2').grid()

## create main program window
window = Tk()

## create window container
app = App(window)

mainloop()

【讨论】:

  • 我没有使用您的示例,因为出于某种原因,我在我的应用程序中到达了“pack”以获取所有需要的小部件。尽管如此,此解决方案也满足了我在此处的示例中定义的要求。
猜你喜欢
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多