[146816] trunk/dports/python/py-pmw
khindenburg at macports.org
khindenburg at macports.org
Fri Mar 18 06:48:10 PDT 2016
Revision: 146816
https://trac.macports.org/changeset/146816
Author: khindenburg at macports.org
Date: 2016-03-18 06:48:10 -0700 (Fri, 18 Mar 2016)
Log Message:
-----------
py-pmw: update to 2.0.0 + patches; add python 34/35 #47246
Modified Paths:
--------------
trunk/dports/python/py-pmw/Portfile
Added Paths:
-----------
trunk/dports/python/py-pmw/files/
trunk/dports/python/py-pmw/files/patch-pmw2.diff
Modified: trunk/dports/python/py-pmw/Portfile
===================================================================
--- trunk/dports/python/py-pmw/Portfile 2016-03-18 13:44:36 UTC (rev 146815)
+++ trunk/dports/python/py-pmw/Portfile 2016-03-18 13:48:10 UTC (rev 146816)
@@ -5,7 +5,7 @@
PortGroup python 1.0
name py-pmw
-version 1.3.3a
+version 2.0.0
maintainers nomaintainer
platforms darwin
license MIT
@@ -16,21 +16,27 @@
homepage http://pmw.sourceforge.net/
master_sites sourceforge:pmw
-distname Pmw_[string map {. _} ${version}]
+distname Pmw-${version}
-checksums rmd160 8646f857f20615671422d6275ed2b8126cc1d0ea \
- sha256 46abf4f0ac3c51e3b65e350543e08bb92f4ac93bd47d23e3d072bc9d5f7a815b
+patchfiles patch-pmw2.diff
+patch.pre_args -p1
+checksums rmd160 2a76186192f13eb22c373b3e0e60ce65cba506fe \
+ sha256 2babb2855feaabeea1003c6908b61c9d39cff606d418685f0559952714c680bb
+
supported_archs noarch
-python.versions 27
+python.versions 27 34 35
-worksrcdir Pmw
+post-patch {
+ reinplace "s|format|fmt|g" ${worksrcpath}/Pmw/Pmw_2_0_0/demos/Counter.py
+ system -W ${worksrcpath} "/usr/bin/find . -type f -name '*.py' -print0 | xargs -0 perl -pi -e 's|/usr/bin/env python|${prefix}/bin/python${python.branch}|g'"
+}
if {${name} ne ${subport}} {
depends_lib-append port:py${python.version}-tkinter
+
+ livecheck.type none
+} else {
+ livecheck.regex Pmw-(\[0-9.\]+)${extract.suffix}
}
-
-livecheck.type regex
-livecheck.url http://sourceforge.net/projects/pmw/files/
-livecheck.regex Pmw.(\[0-9.\]\\.\[0-9.\]\\.\[0-9.\]).tar.gz
Added: trunk/dports/python/py-pmw/files/patch-pmw2.diff
===================================================================
--- trunk/dports/python/py-pmw/files/patch-pmw2.diff (rev 0)
+++ trunk/dports/python/py-pmw/files/patch-pmw2.diff 2016-03-18 13:48:10 UTC (rev 146816)
@@ -0,0 +1,652 @@
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/demos/HistoryText.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/demos/HistoryText.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/demos/HistoryText.py 2012-08-03 20:56:51.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/demos/HistoryText.py 2015-03-23 09:56:09.000000000 -0400
+@@ -38,7 +38,7 @@
+ ['Redo', self.historyText.redo],
+ [20, None],
+ ['Prev', self.historyText.prev],
+- ['Next', self.historyText.__next__],
++ ['Next', self.historyText.next],
+ [30, None],
+ ['Execute', Pmw.busycallback(self.executeQuery)],
+ )
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwBase.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwBase.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwBase.py 2013-04-25 16:33:16.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwBase.py 2015-03-23 09:56:09.000000000 -0400
+@@ -22,6 +22,22 @@
+ import tkinter
+ import collections
+
++# tkinter 8.5 -> 8.6 fixed a problem in which selected indexes
++# were reported as strings instead of ints
++# by default emulate the same functionality so we don't break
++# existing interfaces but allow for easy switching
++#_forceTkinter85Compatibility = True
++
++#def setTkinter85Compatible(value):
++# global _forceTkinter85Compatibility
++# if isinstance(value, bool):
++# _forceTkinter85Compatibility = value and tkinter.TkVersion > 8.5
++
++#def emulateTk85():
++# global _forceTkinter85Compatibility
++# return _forceTkinter85Compatibility
++
++
+ # Special values used in index() methods of several megawidgets.
+ END = ['end']
+ SELECT = ['select']
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwComboBox.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwComboBox.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwComboBox.py 2012-09-08 09:10:06.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwComboBox.py 2015-03-23 09:56:09.000000000 -0400
+@@ -32,14 +32,14 @@
+
+ # Create the components.
+ interior = self.interior()
+-
++
+ self._entryfield = self.createcomponent('entryfield',
+ (('entry', 'entryfield_entry'),), None,
+ Pmw.EntryField, (interior,))
+ self._entryfield.grid(column=2, row=2, sticky=self['sticky'])
+ interior.grid_columnconfigure(2, weight = 1)
+ self._entryWidget = self._entryfield.component('entry')
+-
++
+ if self['dropdown']:
+ self._isPosted = 0
+ interior.grid_rowconfigure(2, weight = 1)
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwEntryField.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwEntryField.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/lib/PmwEntryField.py 2013-04-25 15:52:25.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/lib/PmwEntryField.py 2015-03-23 09:56:09.000000000 -0400
+@@ -416,9 +416,9 @@
+ return ERROR
+ return PARTIAL
+
+-def datevalidator(text, format = 'ymd', separator = '/'):
++def datevalidator(text, fmt = 'ymd', separator = '/'):
+ try:
+- Pmw.datestringtojdn(text, format, separator)
++ Pmw.datestringtojdn(text, fmt, separator)
+ return OK
+ except ValueError:
+ if re.search('[^0-9' + separator + ']', text) is not None:
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/ComboBox_test.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/ComboBox_test.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/ComboBox_test.py 2012-09-21 20:46:15.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/ComboBox_test.py 2015-03-23 09:56:09.000000000 -0400
+@@ -5,6 +5,8 @@
+ import Test
+ import Pmw
+
++
++
+ Test.initialise()
+
+ if tkinter.TkVersion >= 8.4:
+@@ -130,7 +132,7 @@
+ (c.setentry, '', 1),
+ (c.get, (), ''),
+ (c.selectitem, 'More Test'),
+- (c.curselection, (), ('0',)),
++ ( (c.curselection, (), (0,)) if Test.afterTk85() else (c.curselection, (), ('0',)) ),
+ (c.delete, (0, 'end')),
+ (c.size, (), 0),
+ (c.getcurselection, (), ()),
+@@ -148,7 +150,7 @@
+ (c.see, 11),
+ (c.get, 'end', 'Really Long String Test'),
+ (c.selectitem, 5),
+- (c.curselection, (), ('5',)),
++ ( (c.curselection, (), (5,)) if Test.afterTk85() else (c.curselection, (), ('5',)) ),
+ (c.clear, ()),
+ (c.get, (), ''),
+ (c.size, (), 0),
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/Counter_test.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/Counter_test.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/Counter_test.py 2013-04-25 16:00:36.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/Counter_test.py 2015-03-23 09:56:09.000000000 -0400
+@@ -103,7 +103,7 @@
+ ('entry_textvariable', Test.stringvar),
+ (c.checkentry, (), 0),
+ (c.cget, 'entry_background', 'red'),
+- ('entryfield_validate', {'validator' : 'date', 'format' : 'dmy'}),
++ ('entryfield_validate', {'validator' : 'date', 'fmt' : 'dmy'}),
+ (c.valid, (), 0),
+ ('datatype', {'counter' : 'date', 'format' : 'dmy', 'yyyy' : 1}),
+ (c.setentry, '22/12/1999', Pmw.OK),
+@@ -128,7 +128,7 @@
+ (c.decrement, ()),
+ (c.get, (), '10.00.00'),
+
+- ('entryfield_validate', {'validator' : 'date', 'format' : 'dmy'}),
++ ('entryfield_validate', {'validator' : 'date', 'fmt' : 'dmy'}),
+ (c.valid, (), 0),
+ ('increment', 1),
+ ('datatype', {'counter' : 'date', 'format' : 'dmy'}),
+@@ -152,7 +152,7 @@
+ (c.get, (), '00#@!01#@!05'), # max not exceeded
+ ('increment', 1),
+
+- ('entryfield_validate', {'validator' : 'date', 'format' : 'ymd',
++ ('entryfield_validate', {'validator' : 'date', 'fmt' : 'ymd',
+ 'separator' : '-' }),
+ (c.valid, (), 0),
+ ('datatype', {'counter' : 'date', 'format' : 'ymd', 'yyyy' : 1,
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/ManualTests.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/ManualTests.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/ManualTests.py 2012-08-03 20:56:51.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/ManualTests.py 2015-03-23 09:56:09.000000000 -0400
+@@ -1 +1,488 @@
+-Non
++#!/usr/bin/env python
++
++# This is a rough collection of tests that can not be automated.
++# To add a new test, create a function with name ending in '_test'.
++
++import os
++import string
++import time
++import sys
++import Test
++import tkinter
++import Pmw
++
++# ----------------------------------------------------------------------
++
++def scrolledframeflashing_test():
++ # Script which demonstrates continuous flashing of dynamic scrollbars
++ # in Pmw.ScrolledFrame.
++ #
++ # When this script is run, the two scrollbars will be continuously
++ # mapped and unmapped and the window will continuously change size.
++
++ frame = tkinter.Frame(root)
++ frame.pack(fill = 'both', expand = 1)
++
++ sf = Pmw.ScrolledFrame(frame, borderframe = 0)
++ sf.pack(fill = 'both', expand = 1)
++
++ inner = tkinter.Frame(sf.interior(),
++ width = 401,
++ height = 300,
++ borderwidth = 0,
++ highlightthickness = 0,
++ )
++ inner.pack(fill = 'both', expand = 1)
++
++# ----------------------------------------------------------------------
++
++def scrolledlistboxflashing_test():
++ # Script which demonstrates continuous flashing of dynamic scrollbars
++ # in Pmw.ScrolledListBox.
++ #
++ # When this script is run, the two scrollbars will be continuously
++ # mapped and unmapped and the window will continuously change size.
++
++ frame = tkinter.Frame(root)
++ frame.pack(fill = 'both', expand = 1)
++
++ sf = Pmw.ScrolledListBox(frame,
++ listbox_width = 20,
++ listbox_height = 10
++ )
++ sf.pack(fill = 'both', expand = 1)
++ for i in range(11):
++ sf.insert('end', '2' * 20)
++
++# ----------------------------------------------------------------------
++
++def scrolledlistboxflashing2_test():
++ # Another script which demonstrates continuous flashing of dynamic
++ # scrollbars in Pmw.ScrolledListBox under Pmw.0.8.
++ #
++ # When this script is run, the two scrollbars will be continuously
++ # mapped and unmapped and the window will continuously change size.
++ #
++ # (This did not display error when tried with Pmw.0.8, 99/8/3)
++
++ def insert():
++ sectionList = ['1', '2', '3', '4', '5', '6', '7', '8', '9',
++ '123456789012345678901']
++ for counter in sectionList:
++ slb.insert('end', counter)
++
++ def clear():
++ slb.delete(0, 'end')
++
++ global slb
++ slb = Pmw.ScrolledListBox(root)
++ slb.pack()
++
++ root.after(2000,insert)
++ root.after(3000,clear)
++ root.after(4000,insert)
++
++ root.geometry('400x400')
++
++# ----------------------------------------------------------------------
++
++def scrolledtextflashing_test():
++ # Script which demonstrates continuous flashing of dynamic scrollbars
++ # in Pmw.ScrolledText.
++ #
++ # When this script is run, the two scrollbars will be continuously
++ # mapped and unmapped and the window will continuously change size.
++
++ frame = tkinter.Frame(root)
++ frame.pack(fill = 'both', expand = 1)
++
++ sf = Pmw.ScrolledText(frame,
++ text_width = 20,
++ text_height = 10,
++ text_wrap = 'none',
++ borderframe = 0
++ )
++ sf.pack(fill = 'both', expand = 1)
++ for i in range(11):
++ sf.insert('end', '2' * 20)
++ if i != 10:
++ sf.insert('end', '\n')
++
++# ----------------------------------------------------------------------
++
++def scrolledcanvasflashing_test():
++ # Script which demonstrates continuous flashing of dynamic scrollbars
++ # in Pmw.ScrolledCanvas.
++ #
++ # When this script is run, the two scrollbars will be continuously
++ # mapped and unmapped and the window will continuously change size.
++
++ frame = tkinter.Frame(root)
++ frame.pack(fill = 'both', expand = 1)
++
++ sf = Pmw.ScrolledCanvas(frame,
++ canvas_scrollregion = (0, 0, 301, 200),
++ canvas_width=300,
++ canvas_height=200,
++ borderframe = 0
++ )
++ sf.pack(fill = 'both', expand = 1)
++
++# ----------------------------------------------------------------------
++
++def scrolledframeflashing2_test():
++ # The two scrollbars will be continuously mapped and unmapped, but
++ # the toplevel window will remain the same size.
++
++ root.geometry('550x500')
++
++ frame = tkinter.Frame()
++ frame.pack()
++
++ sf = Pmw.ScrolledFrame(frame, borderframe = 0)
++ sf.pack(fill = 'both')
++
++ inner = tkinter.Frame(sf.interior(),
++ width = 401,
++ height = 300,
++ borderwidth = 0,
++ highlightthickness = 0,
++ )
++ inner.pack()
++
++# ----------------------------------------------------------------------
++
++def reinitialise_test():
++ global text
++ text = """
++ Demonstrates bug in Pmw.0.8.1 and earlier.
++ Click on this button, click on OK in the dialog, then Exit below.
++ When this window appears again, clicking on this button gives
++ an error:
++ TclError: can't invoke "wm" command: application has been destroyed
++ """
++ class test:
++ def __init__(self):
++ root = tkinter.Tk()
++ Pmw.initialise(root)
++ self.messagedialog = Pmw.MessageDialog(message_text = 'Testing')
++ self.messagedialog.withdraw()
++ button = tkinter.Button(
++ text = text, command = self.messagedialog.activate)
++ button.pack(pady = 20)
++ exit = tkinter.Button(text = 'Exit', command = root.destroy)
++ exit.pack(pady = 20)
++ root.mainloop()
++
++ test()
++ test()
++
++# ----------------------------------------------------------------------
++
++def componentgroup_test():
++ def addbutton(bb):
++ bb.configure(Button_background = 'yellow')
++ bb.add('Apples')
++ bb.after(3000, lambda bb = bb:
++ bb.configure(Button_background = 'green'))
++
++ bb = Pmw.ButtonBox(Button_background = 'red')
++ bb.add('Bananas')
++ bb.pack()
++
++ mb = Pmw.MenuBar(Button_background = 'red')
++ mb.configure(Button_background = 'yellow')
++ mb.pack()
++
++ pw = Pmw.PanedWidget(Frame_background = 'red')
++ pw.configure(Frame_background = 'yellow')
++ pw.pack()
++
++ rs = Pmw.RadioSelect(Button_background = 'red')
++ rs.configure(Button_background = 'yellow')
++ rs.pack()
++
++ bb.after(3000, lambda bb = bb, addbutton = addbutton: addbutton(bb))
++
++# ----------------------------------------------------------------------
++
++def balloon_test():
++
++ # TODO
++
++ # Test that the balloon does not reappear if the mouse button is
++ # pressed down inside a widget and then, while the mouse button is
++ # being held down, the mouse is moved outside of the widget and
++ # then moved back over the widget.
++
++ # Test that when a widget is destroyed while a balloon is being
++ # displayed for it then the balloon is withdrawn.
++
++ # Test that when a widget is destroyed while a balloon is being
++ # displayed for another widget then the balloon is not withdrawn.
++
++ # Test that there is no eror when a widget is destroyed during the
++ # initwait period (between when the mouse enters the widget and
++ # when the initwait timer goes off).
++
++ # Test that if unbind() is called on a widget that triggered the
++ # balloon to be displayed then the balloon is withdrawn. Also
++ # test that if another widget triggered the balloon then the
++ # balloon is not withdrawn.
++
++ # Test that if tagunbind() is called on a canvas or text item that
++ # triggered the balloon to be displayed then the balloon is
++ # withdrawn. Also test that if another widget or item triggered
++ # the balloon then the balloon is not withdrawn.
++
++ pass
++
++# ----------------------------------------------------------------------
++
++# A class which prints out a message when an instance is deleted.
++class MyToplevel(tkinter.Toplevel):
++
++ def __init__(self):
++ tkinter.Toplevel.__init__(self)
++
++ def __del__(self):
++ print('Window deleted')
++
++def _runMemoryLeakTest():
++ global top
++ top = MyToplevel()
++ Pmw.MegaToplevel(top)
++ Pmw.AboutDialog(top)
++ Pmw.ComboBoxDialog(top)
++ Pmw.CounterDialog(top)
++ Pmw.Dialog(top)
++ Pmw.MessageDialog(top)
++ Pmw.PromptDialog(top)
++ Pmw.SelectionDialog(top)
++ Pmw.TextDialog(top)
++
++ Pmw.ButtonBox(top).pack()
++ Pmw.ComboBox(top).pack()
++ Pmw.Counter(top).pack()
++ Pmw.EntryField(top).pack()
++ Pmw.Group(top).pack()
++ Pmw.LabeledWidget(top).pack()
++ Pmw.MenuBar(top).pack()
++ Pmw.MessageBar(top).pack()
++ Pmw.NoteBook(top).pack()
++ Pmw.OptionMenu(top).pack()
++ Pmw.PanedWidget(top).pack()
++ Pmw.RadioSelect(top).pack()
++ Pmw.ScrolledCanvas(top).pack()
++ Pmw.ScrolledField(top).pack()
++ Pmw.ScrolledFrame(top).pack()
++ Pmw.ScrolledListBox(top).pack()
++ Pmw.ScrolledText(top).pack()
++ Pmw.TimeCounter(top).pack()
++
++def _killMemoryLeakTest():
++ global top
++ top.destroy()
++ del top
++
++memoryLeakMessage = """
++Click on the "Run test" button to create instances of
++all Pmw megawidgets. Then click on the "Destroy" button.
++The message "Window deleted" should be printed to
++standard output.
++"""
++def memoryleak_test():
++ label = tkinter.Label(text = memoryLeakMessage)
++ label.pack()
++ run = tkinter.Button(text = 'Run test', command = _runMemoryLeakTest)
++ run.pack()
++ kill = tkinter.Button(text = 'Destroy', command = _killMemoryLeakTest)
++ kill.pack()
++
++# ----------------------------------------------------------------------
++
++def memoryleak2_test():
++
++ print('This test continuously creates and deletes megawidgets and')
++ print('their components. It calls the "top" program, so')
++ print('may not work on non-Unix operating systems. Run it for a long,')
++ print('long time and check that the process memory size does not')
++ print('continue to increase. Kill with <Control-C>.')
++
++ pid = os.getpid()
++
++ label = tkinter.Label()
++ label.pack()
++
++ # Setup each test:
++
++ # 1. Create/delete all megawidgets:
++ megawidgets = (
++ Pmw.AboutDialog, Pmw.Balloon, Pmw.ButtonBox, Pmw.ComboBox,
++ Pmw.ComboBoxDialog, Pmw.Counter, Pmw.CounterDialog, Pmw.Dialog,
++ Pmw.EntryField, Pmw.Group, Pmw.HistoryText, Pmw.LabeledWidget,
++ Pmw.MainMenuBar, Pmw.MenuBar, Pmw.MessageBar, Pmw.MessageDialog,
++ Pmw.NoteBook, Pmw.OptionMenu, Pmw.PanedWidget, Pmw.PromptDialog,
++ Pmw.RadioSelect, Pmw.ScrolledCanvas, Pmw.ScrolledField,
++ Pmw.ScrolledFrame, Pmw.ScrolledListBox, Pmw.ScrolledText,
++ Pmw.SelectionDialog, Pmw.TextDialog, Pmw.TimeCounter,
++ )
++
++ # 2. Balloon binding:
++ toplevel = tkinter.Toplevel()
++ balloon = Pmw.Balloon(toplevel)
++ button = tkinter.Button(toplevel)
++ button.pack()
++ canvas = tkinter.Canvas(toplevel)
++ item = canvas.create_rectangle(0, 0, 100, 100)
++ canvas.pack()
++
++ # 3. Adding and deleting menu:
++ toplevel = tkinter.Toplevel()
++ mainmenu = Pmw.MainMenuBar(toplevel)
++ mainmenu.addmenu('Foo', 'help')
++ toplevel.configure(menu = mainmenu)
++
++ # 4. Adding and deleting notebook page:
++ toplevel = tkinter.Toplevel()
++ notebook = Pmw.NoteBook(toplevel)
++ notebook.pack()
++
++ # 5. Adding and deleting panedwidget pane:
++ toplevel = tkinter.Toplevel()
++ panedwidget = Pmw.PanedWidget(toplevel)
++ panedwidget.pack()
++ panedwidget.insert('Foo', size = 100)
++
++ # 6. Adding and deleting MenuBar menu:
++ toplevel = tkinter.Toplevel()
++ menubar = Pmw.MenuBar(toplevel)
++ menubar.pack()
++
++ # 7. Setting OptionMenu items:
++ toplevel = tkinter.Toplevel()
++ optionmenu = Pmw.OptionMenu(toplevel, items = ('XXX', 'YYY', 'ZZZ'))
++ optionmenu.pack()
++
++ # 8. Setting tkinter.Canvas scrollcommand option:
++ toplevel = tkinter.Toplevel()
++ scrollcanvas = Pmw.ScrolledCanvas(toplevel)
++ scrollcanvas.pack()
++
++ global prevSize
++ prevSize = -1
++
++ # Loop and run each test:
++ count = 0
++ while 1:
++ count = count + 1
++ label.configure(text = count)
++
++ # 1. Create/delete all megawidgets:
++ for widgetClass in megawidgets:
++ widget = widgetClass()
++ if widgetClass == Pmw.MainMenuBar:
++ root.configure(menu = widget)
++ elif hasattr(widgetClass, 'pack'):
++ widget.pack()
++ root.update()
++ widget.destroy()
++
++ # 2. Balloon binding:
++ balloon.bind(button, 'help')
++ balloon.tagbind(canvas, item, 'help')
++ # tagbind leaks due to a bug in tkinter (v1.127) Canvas - it adds
++ # bindings to self._tagcommands but does not delete them.
++ root.update()
++
++ # 3. Adding and deleting MainMenuBar menu:
++ mainmenu.addmenu('File', 'help')
++ root.update()
++ mainmenu.deletemenu('File')
++ root.update()
++
++ # 4. Adding and deleting notebook page:
++ notebook.insert('File')
++ root.update()
++ notebook.delete('File')
++ root.update()
++
++ # 5. Adding and deleting panedwidget pane:
++ panedwidget.insert('File', size = 100)
++ root.update()
++ panedwidget.delete('File')
++ root.update()
++
++ # 6. Adding and deleting MenuBar menu:
++ menubar.addmenu('File', 'help')
++ root.update()
++ menubar.deletemenu('File')
++ root.update()
++
++ # 7. Setting OptionMenu items:
++ optionmenu.setitems(('aaa', 'bbb', 'ccc'))
++ root.update()
++
++ # 8. Setting tkinter.Canvas scrollcommand option:
++ scrollcanvas.configure(hscrollmode = 'static')
++ scrollcanvas.configure(hscrollmode = 'dynamic')
++
++ # Check memory usage:
++ # lines = os.popen('top').readlines()
++ lines = os.popen('top -b -n 1 -p %d' % pid).readlines()
++ for line in lines:
++ # if string.find(line, 'python1.5.2') > 0:
++ if string.find(line, '^ *%d' % pid) > 0:
++ break
++ # size = string.atoi(string.lstrip(line[27:32]))
++ size = string.atoi(string.lstrip(line[22:29]))
++ if prevSize != size:
++ print(time.strftime('%H:%M:%S', time.localtime(time.time())),)
++ print(line[:-1])
++ prevSize = size
++
++# ----------------------------------------------------------------------
++
++def usageExit():
++ print('Usage:', sys.argv[0], '<test>')
++ print(' where <test> is one of:')
++ for test in tests:
++ print(' ', test)
++ sys.exit()
++
++tests = []
++for name in list(locals().keys()):
++ if name[-5:] == '_test':
++ tests.append(name)
++tests.sort()
++
++if len(sys.argv) != 2:
++ usageExit()
++
++testName = sys.argv[1]
++if testName not in tests:
++ print('Unknown test "' + testName + '"')
++ usageExit()
++
++if testName == 'reinitialise_test':
++ # Run this by itself, since it calls tkinter.Tk, mainloop, etc.
++ reinitialise_test()
++ sys.exit()
++
++# Use Pmw version in this distribution:
++Test.initialise()
++root = Test.root
++root.deiconify()
++
++# To use a different version of Pmw, comment out the three above lines
++# and the "import Test" line and uncomment these three:
++# root = tkinter.Tk()
++# Pmw.setversion('1.0')
++# Pmw.initialise(root)
++
++testFunction = locals()[testName]
++testFunction()
++
++if testName != 'memoryleak2_test':
++ # This does not use mainloop.
++ root.mainloop()
+diff -uNr Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/Test.py Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/Test.py
+--- Pmw-2.0.0/Pmw/Pmw_2_0_0/tests/Test.py 2013-07-04 18:21:54.000000000 -0400
++++ Pmw-2.0.0.hg/Pmw/Pmw_2_0_0/tests/Test.py 2015-03-23 09:56:09.000000000 -0400
+@@ -11,6 +11,9 @@
+ import _tkinter
+ import inspect
+
++def afterTk85():
++ return tkinter.TkVersion > 8.5
++
+ if tkinter.TkVersion >= 8.4:
+ refcountafterdestroy = 7
+ else:
+@@ -35,6 +38,12 @@
+ sys.path[:0] = [package_dir]
+
+ import Pmw
++
++#disable Tkinter 85 compatibility if TKinter > 8.5
++#if tkinter.TkVersion > 8.5:
++# Pmw.setTkinter85Compatible(False)
++
++
+ # Need to import TestVersion, rather than do its work here, since
+ # __name__ will be known there.
+ import TestVersion
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20160318/3bb9592d/attachment.html>
More information about the macports-changes
mailing list