Propagate "quit" event, do not just terminate application. Resize: flag widgets to be resized, do resizes only once before draw. Draw: flag widgets to be redrawn, do not draw everything on any event.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import locale
locale.setlocale(locale.LC_ALL, '')
from tuikit import Application, MenuBar, MenuButton, Menu, Window
class MyApplication(Application):
def __init__(self):
Application.__init__(self)
self.top.add_handler('keypress', self.on_top_keypress, last=True)
self.top.add_handler('quit', lambda ev: self.terminate())
helpwin = Window()
helpwin.title = 'About'
helpwin.hide()
self.top.add(helpwin)
helpwin.move(10, 5)
#helpwin.closebutton = False
#helpwin.resizable = False
filemenu = Menu([
('New', None),
None,
('Open', None),
('Save', None),
None,
('Quit', self.terminate),
])
editmenu = Menu([('Copy', None), ('Paste', None)])
helpmenu = Menu([('About', helpwin)])
menubar_items = [
('File', filemenu),
('Edit', editmenu),
('Help', helpmenu),
]
menubar = MenuBar(menubar_items)
self.top.add(menubar, halign='fill')
menu = Menu([('Copy', None), ('Paste', None)])
menubtn = MenuButton('MenuButton', menu)
self.top.add(menubtn, halign='center', valign='center')
helpwin.bring_up()
def on_top_keypress(self, ev):
if ev.keyname == 'escape':
self.terminate()
return True
if __name__ == '__main__':
app = MyApplication()
app.start()