Pmw.HistoryText() - text widget with a course-grained form of history
A history text is a scrolled text widget with added functionality to maintain a history of each screen and allow editing of prior screens. Here, screen refers to the entire contents of the text widget. This widget does not support a fine-grained history of every change made to the text.
Together with a few buttons and a scrolled text to display the results, a history text can be used as the query-entry part of a simple interactive text-based database query system. When the user enters and executes a query, the query (the entire contents of the text widget) is added to the history list. The user may view previous queries and either execute them again or modify them and execute the new query. If a previously executed query is modified, the user may undo or redo all changes made to the query before the query is executed.
addhistory()
. The default is 1.
addhistory()
. The default is 1.
next()
and prev()
methods. The default is None.
If None, a label component is not created. The default is None.
Otherwise, the size of the megawidget is determined by the width and height of the text component, along with the size and/or existence of the other components, such as the label, the scrollbars and the scrollmargin option. All these affect the overall size of the megawidget. The default is 0.
If compressany is true, a new entry will be added to the history list only if the currently displayed entry has changed.
If compresstail is true, a new entry will be added to the history list only if the currently displayed entry has changed or if it is not the last entry in the history list.
addhistory()
. The second item is the edited text (if the user
has modified the entry but addhistory()
has not yet been called
on the text). The third item specifies whether the entry should
currently display the original or modified text.
undo()
.
class Demo: def __init__(self, parent): # Create and pack the PanedWidget to hold the query and result # windows. # !! panedwidget should automatically size to requested size panedWidget = Pmw.PanedWidget(parent, orient = 'vertical', hull_height = 400, hull_width = 550) panedWidget.add('query', min = 0.05, size = 0.2) panedWidget.add('buttons', min = 0.1, max = 0.1) panedWidget.add('results', min = 0.05) panedWidget.pack(fill = 'both', expand = 1) # Create and pack the HistoryText. self.historyText = Pmw.HistoryText(panedWidget.pane('query'), text_wrap = 'none', text_width = 60, text_height = 10, historycommand = self.statechange, ) self.historyText.pack(fill = 'both', expand = 1) self.historyText.component('text').focus() buttonList = ( [20, None], ['Clear', self.clear], ['Undo', self.historyText.undo], ['Redo', self.historyText.redo], [20, None], ['Prev', self.historyText.prev], ['Next', self.historyText.next], [30, None], ['Execute', Pmw.busycallback(self.executeQuery)], ) self.buttonDict = {} buttonFrame = panedWidget.pane('buttons') for text, cmd in buttonList: if type(text) == type(69): frame = tkinter.Frame(buttonFrame, width = text) frame.pack(side = 'left') else: button = tkinter.Button(buttonFrame, text = text, command = cmd) button.pack(side = 'left') self.buttonDict[text] = button for text in ('Prev', 'Next'): self.buttonDict[text].configure(state = 'disabled') self.results = Pmw.ScrolledText(panedWidget.pane('results'), text_wrap = 'none') self.results.pack(fill = 'both', expand = 1) def statechange(self, prevstate, nextstate): self.buttonDict['Prev'].configure(state = prevstate) self.buttonDict['Next'].configure(state = nextstate) def clear(self): self.historyText.delete('1.0', 'end') def addnewlines(self, text): if len(text) == 1: text = text + '\n' if text[-1] != '\n': text = text + '\n' if text[-2] != '\n': text = text + '\n' return text def executeQuery(self): sql = self.historyText.get() self.results.insert('end', 'Query:\n' + self.addnewlines(sql)) self.results.see('end') self.results.update_idletasks() self.historyText.addhistory() results = 'Results:\nfoo' if len(results) > 0: self.results.insert('end', self.addnewlines(results)) self.results.see('end')
Pmw 2.1 -
31 Dec 2020
- Home
Manual page last reviewed: 20 May 2002