在 Python 中设置正确的 Tkinter 小部件位置 [英] set the correct Tkinter widgets position in Python

查看:32
本文介绍了在 Python 中设置正确的 Tkinter 小部件位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Tkinter 在 Python 中为 RAW 图像转换器编写 GUI.GUI 分为三部分.A部分有一个导入RAW文件的按钮,B部分有四个Checkbuttons,C部分有一个Checkbuttons,有两个输入空间.

i am writing a GUI for a RAW image converter in Python using Tkinter. The GUI is divide in three part. The part A has a button to import the RAW file, the part B has four Checkbuttons, and the part C has Checkbuttons with two Entry spaces.

第 0 列(= 第一列)的长度由标签正确色差"(最长元素)给出.这意味着如果我更改名称,例如以正确的白平衡色差"所有元素如下图所示移动,并且部分 A、B 和 C 相互关联.

The length of the columns 0 (= the first) is given by the label "correct chromatic aberration" (the longest element). This mean if i change the name for example in correct chromatic aberration for white balance" all elements are shifted as the image below, and the part A, B, and C are related each other.

我希望将 A 部分独立于 B 部分,依此类推,以获得下图.换句话说,我希望将每个按钮块放入它们自己的框架中,以及主窗口中的框架.

I wish to make independent the part A to the part B, and so on, in order to have the below image. In other words i wish to place each block of buttons into their own frame, and the frames in the main window.

原代码为:

from __future__ import division
from Tkinter import *
import tkMessageBox
import tkFileDialog

class MainWindow(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("FOO converter")
        self.master.minsize(350, 150)
        self.grid(sticky=E+W+N+S)

        self.save_dir = None
        self.filename_open = None

        top = self.winfo_toplevel()
        top.rowconfigure(0, weight=1)
        top.columnconfigure(0, weight=1)

        self.CHART_FILE_TYPES = [('Pentax Electronic Format', '*.pef'),
                                ('Sony Alpha Raw', '*.arw'),
                                ('Minolta Raw', '*.mrw'),
                                ('Camera Image File Format', '*.crw'),
                                ('Canon Raw', '*.cr2'),
                                ('Epson Raw', '*.erw'),
                                ('Samsung Raw', '*.srw'),
                                ('Fujifilm Raw', '*.raf'),
                                ('Kodak Digital Camera Raw', '*.dcr'),
                                ('Nikon Electronic Format', '*.nef'),
                                ('Olympus Raw', '*.orf'),
                                ('All files', '.*')]

        for i in range(10): self.rowconfigure(i, weight=1)
        self.columnconfigure(1, weight=1)

        self.open = Button(self, text='Input raw image file', command=self.open, activeforeground="red")
        self.open.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S)

        self.sep = Frame(self, height=2, width=450, bd=1, relief=SUNKEN)
        self.sep.grid(row=1, column=0, columnspan=4, padx=5, pady=5)

        self.CheckVar_camera_white_balance = IntVar()
        self.CheckVar_camera_white_balance = Checkbutton(self,
            text="Camera white balance",
            variable=self.CheckVar_camera_white_balance,
            onvalue=1,
            offvalue=0)
        self.CheckVar_camera_white_balance.grid(row=2, column=0, pady=0, padx=0, sticky=W)

        self.CheckVar_average_whole_image_white_balance = IntVar()
        self.CheckVar_average_whole_image_white_balance = Checkbutton(self,
            text="Average the whole image for white balance",
            variable=self.CheckVar_average_whole_image_white_balance,
            onvalue=1,
            offvalue=0)
        self.CheckVar_average_whole_image_white_balance.grid(row=3, column=0, pady=0, padx=0, sticky=W)

        self.CheckVar_correct_chromatic_aberration = IntVar()
        self.CheckVar_correct_chromatic_aberration = Checkbutton(self,
            text="Correct chromatic aberration",
            variable=self.CheckVar_correct_chromatic_aberration,
            onvalue=1,
            offvalue=0)
        self.CheckVar_correct_chromatic_aberration.grid(row=4, column=0, pady=0, padx=0, sticky=W)

        self.CheckVar_fix_dead_pixels = IntVar()
        self.CheckVar_fix_dead_pixels = Checkbutton(self,
            text="Fix dead pixels",
            variable=self.CheckVar_fix_dead_pixels,
            onvalue=1,
            offvalue=0)
        self.CheckVar_fix_dead_pixels.grid(row=5, column=0, pady=0, padx=0, sticky=W)

        self.sep = Frame(self, height=2, width=450, bd=1, relief=SUNKEN)
        self.sep.grid(row=6, column=0, columnspan=4, padx=5, pady=5)

        self.CheckVar_brightness = IntVar()
        self.CheckVar_brightness = Checkbutton(self, text="Brightness",
            command=self.switch_brightness,
            variable=self.CheckVar_brightness,
            onvalue=1,
            offvalue=0)
        self.CheckVar_brightness.grid(row=7, column=0, pady=0, padx=2, sticky=W)

        self.label_level_brightness = Label(self, text="Brightness level:", state=DISABLED)
        self.label_level_brightness.grid(row=8, column=0, pady=0, padx=0, sticky=W)

        self.entry_level_brightness = Entry(self, state=DISABLED)
        self.entry_level_brightness.grid(row=8, column=1, pady=0, padx=0, sticky=W)

        self.label_gamma_curve = Label(self, text="Gamma curve:", state=DISABLED)
        self.label_gamma_curve.grid(row=9, column=0, pady=0, padx=0, sticky=W)

        self.entry_gamma_curve_1 = Entry(self, state=DISABLED)
        self.entry_gamma_curve_1.grid(row=9, column=1, pady=0, padx=0, sticky=W)

        self.entry_gamma_curve_2 = Entry(self, state=DISABLED)
        self.entry_gamma_curve_2.grid(row=9, column=2, pady=0, padx=0, sticky=E+W+N+S)


# functions

    def open(self):
        self.filename_open = tkFileDialog.askopenfilename(filetypes=self.CHART_FILE_TYPES, defaultextension='.*')

    def switch_brightness(self):
        pass

if __name__ == "__main__":
   d = MainWindow()
   d.mainloop()

推荐答案

如果您希望区域独立,请为每个区域使用一个框架.例如:

If you want the regions to be independent, use a frame for each region. For example:

top_frame = Frame(self, ...)
middle_frame = Frame(self, ...)
bottom_frame = Frame(self, ...)

top_frame.pack(side="top", fill="x")
middle_frame.pack(side="top", fill="x")
bottom_frame.pack(side="top", fill="x")

这样,您现在可以独立处理每个区域.现在,您可以为不同的部分使用不同的几何管理器.您可能希望在顶部和中间框架中使用 pack,在底部框架中使用 grid.

With that, you can now treat each region independently. This now affords you the luxury of using different geometry managers for different sections. You may want to use pack in the top and middle frame, and grid in the lower frame.

# Top frame
self.open = Button(top_frame, ...)
self.open.pack(side="left")
...
# Middle frame
self.CheckVar_camera_white_balance = Checkbutton(middle_frame, ...)
self.CheckVar_camera_white_balance.pack(side="top", fill="x")
...
# Bottom frame
self.CheckVar_brightness = Checkbutton(bottom_frame, ...)
self.CheckVar_brightness.grid(row=0, column=0, pady=0, padx=2, sticky=W)
...

这篇关于在 Python 中设置正确的 Tkinter 小部件位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆