我使用Python 3.1的方式。

我想建立使用Tkinter的一个简单的GUI - 标签,文本输入框,按钮的第一行和可编辑的文本区域在滚动条的权利,并在其底部上 - 在第二排。请帮我解决了布局。我下面有没有做得比较工作。如果非要用一个网格,我会的。我想保留的代码很简单 - 我想“卖”的Python我的一些同事。所以,我希望得到一个体面几分的外观和感觉。建议更好的填充,如果你不介意的话。另外,如果我的变量名等似乎不可思议,那么请记录。

在同一时间,我想假装这是一个扔掉的剧本我还没有花了很多时间。因为我要求你的帮助,这是不是这样,但他们并不需要知道)。所以,我不想介绍看中代码来创建漂亮的边框,等我只是想的东西是视觉上的吸引力,干净和简单。如果我不这样做,那么我的演讲将无法实现其目标。

感谢您,我的代码如下:

class App:
    def __init__(self, parent):
        frame = Frame(parent)
        self.__setup_gui(frame) # Call Helper
        frame.pack(padx=15, pady=15)
        parent.title('To be changed')

    def __setup_gui(self, frame):

        # First Row
        self.cs_label = Label(frame, text='Change Set: ')
        self.cs_label.pack(side=LEFT, padx=10, pady=10)

        self.cs_val = Entry(frame, width=10)
        self.cs_val.pack(side=LEFT, padx=10, pady=10)

        self.get_button = Button(frame, text='Get', command=self.get_content)
        self.get_button.pack(side=LEFT, padx=10, pady=10)

        # Text area and scrollbar
        self.text_area = Text(frame, height=10, width=50, background='white')
        # Put a scroll bar in the frame
        scroll = Scrollbar(frame)
        self.text_area.configure(yscrollcommand=scroll.set)
        self.text_area.pack(side=TOP)
        scroll.pack(side=RIGHT,fill=Y)

        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()
有帮助吗?

解决方案

您一定要电网管理者 - 包只能通过自身的工作水平或垂直叠层。您可以使用多个框架来解决它,但我觉得它更容易扩大一个GUI,如果你只是做与电网开始。

下面就是我的工作了真正的快速根据你所说的话和代码。我减少/去除填充 - 它看着我巨大的 - 我设置了两个滚动条,在一个子帧,使填充锻炼更轻松。需要注意的是,使水平滚动条有用的文本区域需要有包= NONE;否则你不如从tkinter.scrolledtext使用容易“ScrolledText”插件并跳过水平滚动条。

我现在已经重新修订事情有点允许调整大小,以显示顶部按钮的最小尺寸 - 见最小尺寸和行/ columnconfigure的用途

顺便说一句,它看起来像你的变量不被从任何地方拉 - 是故意的。

from tkinter import *

class App:
    def __init__(self, parent):
        self.__setup_gui(parent) # Call Helper
        parent.title('To be changed')

    def __setup_gui(self, parent):

        # First Row
        self.rowframe = Frame(parent)
        self.rowframe.grid()
        self.cs_label = Label(self.rowframe, text='Change Set: ')
        self.cs_label.grid(row=0, column=0, padx=2, pady=2)

        self.cs_val = Entry(self.rowframe, width=10)
        self.cs_val.grid(row=0, column=1, padx=2, pady=2)

        self.get_button = Button(self.rowframe, text='Get', command=self.get_content)
        self.get_button.grid(row=0, column=2, padx=2, pady=2)
        parent.update_idletasks()
        parent.minsize(width=self.rowframe.winfo_width(), height=self.rowframe.winfo_height())

        # Text area and scrollbars
        self.textframe = Frame(parent)
        self.textframe.grid(row=1, columnspan=2, padx=2, pady=2, sticky=N+S+E+W)

        self.hscroll = Scrollbar(self.textframe, orient=HORIZONTAL)
        self.vscroll = Scrollbar(self.textframe)
        self.text_area = Text(self.textframe, height=10, width=50, wrap=NONE, background='white', yscrollcommand=self.vscroll.set, xscrollcommand=self.hscroll.set)
        self.text_area.grid(row=0, column=0, sticky=N+S+E+W)
        self.hscroll.config(command=self.text_area.xview)
        self.hscroll.grid(row=1, column=0, sticky=E+W)
        self.vscroll.config(command=self.text_area.yview)
        self.vscroll.grid(row=0, column=1, sticky=N+S)

        # Row 0 defaults to 0
        parent.rowconfigure(1, weight=1)
        parent.columnconfigure(1, weight=1)

        # Textarea setup
        self.textframe.rowconfigure(0, weight=1)
        self.textframe.columnconfigure(0, weight=1)


        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()

现在,所有的说......你可能会得到与PyGTK的,PyQt的,或wxPython的更多的视觉吸引力,虽然Tkinter的未来“标准”是一个很好的功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top