Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 1 | from tkinter import Frame, Label |
David Scherer | 7aced17 | 2000-08-15 01:13:23 +0000 | [diff] [blame] | 2 | |
Terry Jan Reedy | bfbaa6b | 2016-08-31 00:50:55 -0400 | [diff] [blame] | 3 | |
David Scherer | 7aced17 | 2000-08-15 01:13:23 +0000 | [diff] [blame] | 4 | class MultiStatusBar(Frame): |
David Scherer | 7aced17 | 2000-08-15 01:13:23 +0000 | [diff] [blame] | 5 | |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 6 | def __init__(self, master, **kw): |
Raymond Hettinger | 931237e | 2003-07-09 18:48:24 +0000 | [diff] [blame] | 7 | Frame.__init__(self, master, **kw) |
Kurt B. Kaiser | 8220fdd | 2001-07-13 17:52:08 +0000 | [diff] [blame] | 8 | self.labels = {} |
| 9 | |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 10 | def set_label(self, name, text='', side='left', width=0): |
Guido van Rossum | 811c4e0 | 2006-08-22 15:45:46 +0000 | [diff] [blame] | 11 | if name not in self.labels: |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 12 | label = Label(self, borderwidth=0, anchor='w') |
Terry Jan Reedy | d36d817 | 2015-11-16 07:32:26 -0500 | [diff] [blame] | 13 | label.pack(side=side, pady=0, padx=4) |
Kurt B. Kaiser | 8220fdd | 2001-07-13 17:52:08 +0000 | [diff] [blame] | 14 | self.labels[name] = label |
| 15 | else: |
| 16 | label = self.labels[name] |
Terry Jan Reedy | 4932ac2 | 2015-11-16 07:36:22 -0500 | [diff] [blame] | 17 | if width != 0: |
Terry Jan Reedy | d36d817 | 2015-11-16 07:32:26 -0500 | [diff] [blame] | 18 | label.config(width=width) |
Kurt B. Kaiser | 8220fdd | 2001-07-13 17:52:08 +0000 | [diff] [blame] | 19 | label.config(text=text) |
David Scherer | 7aced17 | 2000-08-15 01:13:23 +0000 | [diff] [blame] | 20 | |
Terry Jan Reedy | bfbaa6b | 2016-08-31 00:50:55 -0400 | [diff] [blame] | 21 | |
Terry Jan Reedy | a748032 | 2016-07-10 17:28:10 -0400 | [diff] [blame] | 22 | def _multistatus_bar(parent): # htest # |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 23 | from tkinter import Toplevel, Frame, Text, Button |
| 24 | top = Toplevel(parent) |
Terry Jan Reedy | a748032 | 2016-07-10 17:28:10 -0400 | [diff] [blame] | 25 | x, y = map(int, parent.geometry().split('+')[1:]) |
| 26 | top.geometry("+%d+%d" %(x, y + 175)) |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 27 | top.title("Test multistatus bar") |
| 28 | frame = Frame(top) |
Terry Jan Reedy | a748032 | 2016-07-10 17:28:10 -0400 | [diff] [blame] | 29 | text = Text(frame, height=5, width=40) |
Terry Jan Reedy | 1b392ff | 2014-05-24 18:48:18 -0400 | [diff] [blame] | 30 | text.pack() |
| 31 | msb = MultiStatusBar(frame) |
| 32 | msb.set_label("one", "hello") |
| 33 | msb.set_label("two", "world") |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 34 | msb.pack(side='bottom', fill='x') |
Terry Jan Reedy | 1b392ff | 2014-05-24 18:48:18 -0400 | [diff] [blame] | 35 | |
| 36 | def change(): |
| 37 | msb.set_label("one", "foo") |
| 38 | msb.set_label("two", "bar") |
| 39 | |
Terry Jan Reedy | b60adc5 | 2016-06-21 18:41:38 -0400 | [diff] [blame] | 40 | button = Button(top, text="Update status", command=change) |
| 41 | button.pack(side='bottom') |
Terry Jan Reedy | 1b392ff | 2014-05-24 18:48:18 -0400 | [diff] [blame] | 42 | frame.pack() |
David Scherer | 7aced17 | 2000-08-15 01:13:23 +0000 | [diff] [blame] | 43 | |
| 44 | if __name__ == '__main__': |
Terry Jan Reedy | 1b392ff | 2014-05-24 18:48:18 -0400 | [diff] [blame] | 45 | from idlelib.idle_test.htest import run |
| 46 | run(_multistatus_bar) |