Python Tkinter - 如何使用设置宽度

时间:2018-02-15 14:13:18

标签: python python-2.7 tkinter

我正在制作一个程序,我正在使用python的tkinter gui库构建。

我的2个问题

  1. 我试图制作一个框架,其中包含所选网站的屏幕截图。我创建了框架和图像,但框架没有像预期的那样锚定到窗口的右侧。当框架内的标签元素具有图像时,框架是预期长度
    with screenshot 但是,当所选网站没有图像时,框架不会一直延伸到窗口的右侧。 without screenshot
    下面是我设置图像容器/框架和相应图像的代码部分。

    self.frame_ImageContainer = Frame(self.tab_Details, width=320, height=180, bg='black', bd=2)
    self.frame_ImageContainer.grid(column=4, row=0, rowspan=11, columnspan=3, sticky=(N, S, E, W))
    self.button_TakeScreenshot = Button(self.frame_ImageContainer, text='Take Screenshot', command=self.fn_RunScraper)
    self.button_TakeScreenshot.grid(column=1, row=5, sticky=(E, W))
    self.widget_Image = Label(self.frame_ImageContainer, compound='top')
    self.widget_Image.grid(column=0, row=0, rowspan=12, columnspan=3, sticky=N)
    
    self.frame_ImageContainer.grid_columnconfigure(0, weight=1)
    self.frame_ImageContainer.grid_columnconfigure(1, weight=1)
    self.frame_ImageContainer.grid_columnconfigure(2, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(0, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(1, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(2, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(3, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(4, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(5, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(6, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(7, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(8, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(9, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(10, weight=1)
    self.frame_ImageContainer.grid_rowconfigure(11, weight=1)
    
  2. “截取屏幕截图”按钮不会垂直居中和放大水平即可。我试图将Take Screenshot按钮置于框架中间,但它目前仅垂直应用。我也尝试使用.place(relx=.5, rely=.5, anchor=CENTER),但是当我尝试时,框架/图像甚至不会显示在屏幕上。

  3. 我想要完成的事情

    1. 使图像框架设置为宽度
    2. 当网站尚未截屏时,在图像框的中心显示“截取屏幕截图”按钮。
    3. 在问题表格中

      1. 如何制作相框和相框图像保持一致的宽度&身高(320x180)?
      2. 如何将“截图”按钮垂直和水平放置在图像框内?

2 个答案:

答案 0 :(得分:2)

  1. 如果您希望框架具有固定大小,则只需取消其子项使用的布局管理器的传播,根据子项的大小要求丢弃大小更改,同时定义设置其width和{{ 1}}:
  2. height
    1. 要使窗口小部件居中,一种简单的方法是使用frame = tk.Frame(..., width=320, height=180, ...) #frame.grid_propagate(False) # uncomment if children use pack frame.pack_propagate(False) # uncomment if children use grid
    2. place
      完成两者的

      A Minimal, Complete, and Verifiable example

      widget.place(relx=.5, rely=.5, anchor='center')
      

答案 1 :(得分:1)

  

如何制作相框和相框图像保持一致的宽度&身高(320x180)?

如果您希望框架为特定尺寸,请先为其指定特定尺寸。接下来,使用place向其中添加小部件,或者在使用gridpack

时关闭几何体传播
# if using pack:
self.frame_ImageContainer.pack_propagate(False)

# if using grid:
self.frame_ImageContainer.grid_propagate(False)
  

如何将“截图”按钮在图像框架内垂直和水平居中?

最简单的方法是使用place,因为它不会影响其母版的大小,您可以提供相对坐标。

self.button_TakeScreenshot.place(relx=.5, rely=.5, anchor="center")