toti08
toti08

Reputation: 2464

How to place multiple widgets using grid geometry manager

I am creating a window where the user can set the settings. I am having troubles arranging the widgets on the window. Here is what I get:

enter image description here

I would like the settings on the right column to appear more shifted to the left. The last setting ("Default Directory for Report") should then span over more columns if needed, but without pushing the rows above to the right.

Here is a piece of my code:

self.parser = ConfigParser.SafeConfigParser()
self.parser.read('ALSV-Settings.ini')

''' Coarse X Scan'''
coarseXFrame = LabelFrame(self, text="Coarse X", font = ('Tahoma', 11), fg = '#3A98E4')
coarseXFrame.grid(row = 0, column = 0, padx = 5, pady = 1, sticky = W)
self.minCoarseXLabel = Label(coarseXFrame, text = 'Minimum Coarse X [um]: ', font = ('Tahoma', 10)).grid(row = 1, column = 0, sticky = E)
self.minCoarseXValue = Entry(coarseXFrame, bd = 5)
self.minCoarseXValue.insert(0, self.parser.get('Coarse X Scan', 'minCoarseX'))
self.minCoarseXValue.grid(row = 1, column = 1, padx = 1, pady = 1, sticky = W)

self.maxCoarseXLabel = Label(coarseXFrame, text = 'Maximum Coarse X [um]: ', font = ('Tahoma', 10)).grid(row = 2, column = 0, sticky = E)
self.maxCoarseXValue = Entry(coarseXFrame, bd = 5)
self.maxCoarseXValue.insert(0, self.parser.get('Coarse X Scan', 'maxCoarseX'))
self.maxCoarseXValue.grid(row = 2, column = 1, padx = 1, pady = 1, sticky = W)

self.stepCoarseXLabel = Label(coarseXFrame, text = 'Step Coarse X [um]: ', font = ('Tahoma', 10)).grid(row = 3, column = 0, sticky = E)
self.stepCoarseXValue = Entry(coarseXFrame, bd = 5)
self.stepCoarseXValue.insert(0, self.parser.get('Coarse X Scan', 'stepCoarseX'))
self.stepCoarseXValue.grid(row = 3, column = 1, padx = 1, pady = 1, sticky = W)


'''Coarse Z Scan'''
coarseZFrame = LabelFrame(self, text="Coarse Z", font = ('Tahoma', 11), fg = '#3A98E4')
coarseZFrame.grid(row = 0, column = 2, padx = 5, pady = 1, sticky = W)

self.minCoarseZLabel = Label(coarseZFrame, text = 'Minimum Coarse Z [um]: ', font = ('Tahoma', 10)).grid(row = 1, column = 2, sticky = E)
self.minCoarseZValue = Entry(coarseZFrame, bd = 5)
self.minCoarseZValue.insert(0, self.parser.get('Coarse Z Scan', 'minCoarseZ'))
self.minCoarseZValue.grid(row = 1, column = 3, padx = 1, pady = 1, sticky = W)

self.maxCoarseZLabel = Label(coarseZFrame, text = 'Maximum Coarse Z [um]: ', font = ('Tahoma', 10)).grid(row = 2, column = 2, sticky = E)
self.maxCoarseZValue = Entry(coarseZFrame, bd = 5)
self.maxCoarseZValue.insert(0, self.parser.get('Coarse Z Scan', 'maxCoarseZ'))
self.maxCoarseZValue.grid(row = 2, column = 3, padx = 1, pady = 1, sticky = W)

self.stepCoarseZLabel = Label(coarseZFrame, text = 'Step Coarse Z [um]: ', font = ('Tahoma', 10)).grid(row = 3, column = 2, sticky = E)
self.stepCoarseZValue = Entry(coarseZFrame, bd = 5)
self.stepCoarseZValue.insert(0, self.parser.get('Coarse Z Scan', 'stepCoarseZ'))
self.stepCoarseZValue.grid(row = 3, column = 3, padx = 1, pady = 1, sticky = W)


'''Fine Z Scan'''
fineZFrame = LabelFrame(self, text="Fine Z", font = ('Tahoma', 11), fg = '#3A98E4')
fineZFrame.grid(row = 5, column = 0, padx = 5, pady = 1, sticky = W)
self.fineStepXLabel = Label(fineZFrame, text = 'Fine step X [um]: ', font = ('Tahoma', 10)).grid(row = 6, column = 0, sticky = E)
self.fineStepXValue = Entry(fineZFrame, bd = 5)
self.fineStepXValue.insert(0, self.parser.get('Fine Z', 'stepFineX'))
self.fineStepXValue.grid(row = 6, column = 1, padx = 1, pady = 1, sticky = W)

self.minRelZLabel = Label(fineZFrame, text = 'Minimum relative Z [um]: ', font = ('Tahoma', 10)).grid(row = 7, column = 0, sticky = E)
self.minRelZValue = Entry(fineZFrame, bd = 5)
self.minRelZValue.insert(0, self.parser.get('Fine Z', 'minRelZ'))
self.minRelZValue.grid(row = 7, column = 1, padx = 1, pady = 1, sticky = W)

self.maxRelZLabel = Label(fineZFrame, text = 'Maximum relative Z [um]: ', font = ('Tahoma', 10)).grid(row = 8, column = 0, sticky = E)
self.maxRelZValue = Entry(fineZFrame, bd = 5)
self.maxRelZValue.insert(0, self.parser.get('Fine Z', 'maxRelZ'))
self.maxRelZValue.grid(row = 8, column = 1, padx = 1, pady = 1, sticky = W)

self.stepFineZLabel = Label(fineZFrame, text = 'Step Fine Z [um]: ', font = ('Tahoma', 10)).grid(row = 9, column = 0, sticky = E)
self.stepFineZValue = Entry(fineZFrame, bd = 5)
self.stepFineZValue.insert(0, self.parser.get('Fine Z', 'stepFineZ'))
self.stepFineZValue.grid(row = 9, column = 1, padx = 1, pady = 1, sticky = W)

'''Narrowed-down coarse/fine X'''
narrowedCoarseFineXFrame = LabelFrame(self, text="Narrowed-down coarse/fine X range", font = ('Tahoma', 11), fg = '#3A98E4')
narrowedCoarseFineXFrame.grid(row = 5, column = 2, padx = 5, pady = 1, sticky = W)

self.minRelXLabel = Label(narrowedCoarseFineXFrame, text = 'Minimum relative X [um]: ', font = ('Tahoma', 10)).grid(row = 6, column = 2, sticky = E)
self.minRelXValue = Entry(narrowedCoarseFineXFrame, bd = 5)
self.minRelXValue.insert(0, self.parser.get('Narrowed Coarse X', 'minRelX'))
self.minRelXValue.grid(row = 6, column = 3, padx = 1, pady = 1, sticky = W)

self.maxRelXLabel = Label(narrowedCoarseFineXFrame, text = 'Maximum relative X [um]: ', font = ('Tahoma', 10)).grid(row = 7, column = 2, sticky = E)
self.maxRelXValue = Entry(narrowedCoarseFineXFrame, bd = 5)
self.maxRelXValue.insert(0, self.parser.get('Narrowed Coarse X', 'maxRelX'))
self.maxRelXValue .grid(row = 7, column = 3, padx = 1, pady = 1, sticky = W)

self.stepXCoarseZLabel = Label(narrowedCoarseFineXFrame, text = ' Step X coarse Z [um]: ', font = ('Tahoma', 10)).grid(row = 8, column = 2, sticky = E)
self.stepXCoarseZValue = Entry(narrowedCoarseFineXFrame, bd = 5)
self.stepXCoarseZValue.insert(0, self.parser.get('Narrowed Coarse X', 'stepXCoarseZ'))
self.stepXCoarseZValue .grid(row = 8, column = 3, padx = 1, pady = 1, sticky = W)

'''Settle Time'''
settleTimeFrame = LabelFrame(self, text="Settle time for stage position", font = ('Tahoma', 11), fg = '#3A98E4')
settleTimeFrame.grid(row = 9, column = 0, padx = 5, pady = 1, sticky = W)

self.smallStepLabel = Label(settleTimeFrame, text = 'Settle time small step [sec]: ', font = ('Tahoma', 10)).grid(row = 10, column = 0, sticky = E)
self.smallStepValue = Entry(settleTimeFrame, bd = 5)
self.smallStepValue.insert(0, self.parser.get('Settle Time', 'settleTime_smallStep'))
self.smallStepValue .grid(row = 10, column = 1, padx = 1, pady = 1, sticky = W)

self.largeStepLabel = Label(settleTimeFrame, text = 'Settle time large step [sec]: ', font = ('Tahoma', 10)).grid(row = 11, column = 0, sticky = E)
self.largeStepValue = Entry(settleTimeFrame, bd = 5)
self.largeStepValue.insert(0, self.parser.get('Settle Time', 'settleTime_largeStep'))
self.largeStepValue .grid(row = 11, column = 1, padx = 1, pady = 1, sticky = W)

'''Default X/Z positions'''
DefaultPositionsFrame = LabelFrame(self, text="Default X/Z Positions", font = ('Tahoma', 11), fg = '#3A98E4')
DefaultPositionsFrame.grid(row = 9, column = 2, padx = 5, pady = 1, sticky = W)

self.defaultXLabel = Label(DefaultPositionsFrame, text = 'Default X Position [um]: ', font = ('Tahoma', 10)).grid(row = 10, column = 2, sticky = E)
self.defaultXValue = Entry(DefaultPositionsFrame, bd = 5)
self.defaultXValue.insert(0, self.parser.get('Init Values', 'initposx'))
self.defaultXValue.grid(row = 10, column = 3, padx = 1, pady = 1, sticky = W)

self.defaultZLabel = Label(DefaultPositionsFrame, text = 'Default Z Position [um]: ', font = ('Tahoma', 10)).grid(row = 11, column = 2, sticky = E)
self.defaultZValue = Entry(DefaultPositionsFrame, bd = 5)
self.defaultZValue.insert(0, self.parser.get('Init Values', 'initposz'))
self.defaultZValue.grid(row = 11, column = 3, padx = 1, pady = 1, sticky = W)

'''Default directory for saving Report'''
DefaultPositionsFrame = LabelFrame(self, text="Default directory for Report", font = ('Tahoma', 11), fg = '#3A98E4')
DefaultPositionsFrame.grid(row = 12, column = 0, padx = 5, pady = 1, sticky = W)

self.defaultRepDirLabel = Label(DefaultPositionsFrame, text = 'Default directory for Report: ', font = ('Tahoma', 10))
self.defaultRepDirLabel.grid(row = 13, column = 0, sticky = W)
self.defaultRepDir = Entry(DefaultPositionsFrame, bd = 5, width = 65)
self.savedir = self.parser.get('Report Directory', 'reportDir')
self.defaultRepDir.insert(0, self.savedir)
self.defaultRepDir.grid(row = 13, column = 1, padx = 1, pady = 1, sticky = W)
self.commandButton = Button(DefaultPositionsFrame, text = 'Select Report Directory', command = self.chooseDir, bd = 2)
self.commandButton.grid(row = 13, column = 2, padx = 1, pady = 1, sticky = W)


UpdateButton = Button(self, text = "Apply Settings", command = self.saveValues, font = ('Tahoma', 10))        
UpdateButton.grid(row = 16, column = 1, padx = 5, pady = 5)        

cancelButton = Button(self, text = 'Exit', command = self.destroy, font = ('Tahoma', 10))
cancelButton.grid(row = 16, column = 2, padx = 5, pady = 5)

Thanks in advance for your help!

Upvotes: 0

Views: 55

Answers (1)

Jonah Fleming
Jonah Fleming

Reputation: 1185

When you grid DefaultPositionsFrame add in columnspan=2 to make it stretch 2 columns. This might stuff up your other widgets but it shouldn't be to hard to reorganise them.

Upvotes: 2

Related Questions