我顺便使用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()
答案 0 :(得分:2)
您肯定需要网格管理器 - Pack仅适用于垂直或水平叠加。您可以使用多个框架来解决它,但是如果您只是使用Grid来启动它,我发现扩展GUI会更容易。
以下是我根据您的说法和代码快速完成的工作。我减少/删除了填充 - 它对我来说看起来很大 - 我在一个子框架中设置了两个滚动条,使填充更容易。请注意,要使水平滚动条有用,Text区域需要wrap = NONE;否则你也可以使用tkinter.scrolledtext中的简单'ScrolledText'小部件并跳过水平滚动条。
我现在已经重新调整了一些内容以允许调整大小,显示顶部按钮的最小尺寸 - 请参阅minsize和row / 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即将出现“标准”是一个不错的功能。