From 04f0fca44f372ff5a7e3b92d4e8bac8e85697da6 Mon Sep 17 00:00:00 2001 From: Wu Zhenyu Date: Fri, 14 Jul 2023 13:32:45 +0800 Subject: [PATCH] :bug: Fix wxpython https://discuss.wxpython.org/t/typeerror-menuitem-argument-2-has-unexpected-type-standardid-when-running-the-demo/36464 https://github.com/wxWidgets/Phoenix/issues/2225 --- docs/resources/install.md | 5 +- flake.lock | 72 ++++++++++++++++++------- requirements.txt | 2 +- src/mulimgviewer/gui/main_gui.py | 38 ++++++------- src/mulimgviewer/gui/path_select_gui.py | 6 +-- 5 files changed, 78 insertions(+), 45 deletions(-) diff --git a/docs/resources/install.md b/docs/resources/install.md index fbdae26..5196f19 100644 --- a/docs/resources/install.md +++ b/docs/resources/install.md @@ -17,9 +17,6 @@ pip install mulimgviewer pip install mulimgviewer[update] ``` -注意,目前由于依赖项 [wxpython](https://github.com/wxWidgets/Phoenix) -的 [bug](https://github.com/wxWidgets/Phoenix/issues/2225),该方法可能会失败。 - ![icon](https://user-images.githubusercontent.com/32936898/224473440-2088edd7-42e5-45a3-a403-515e2daa019a.jpg) ## [AUR](https://aur.archlinux.org/packages/python-mulimgviewer) @@ -54,7 +51,7 @@ brew install python-mulimgviewer 目前该软件还没有打包到 Ubuntu PPA 上。 -这是一个临时的安装方法,它避开了 `wxpython` 的 bug: +这是一个临时的安装方法: ```sh sudo apt install python3-wxgtk4.0 diff --git a/flake.lock b/flake.lock index 6f97cae..69ba62f 100644 --- a/flake.lock +++ b/flake.lock @@ -19,12 +19,15 @@ } }, "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, "locked": { - "lastModified": 1678901627, - "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "owner": "numtide", "repo": "flake-utils", - "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "type": "github" }, "original": { @@ -34,12 +37,15 @@ } }, "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, "locked": { - "lastModified": 1678901627, - "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "owner": "numtide", "repo": "flake-utils", - "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "type": "github" }, "original": { @@ -66,11 +72,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1681036984, - "narHash": "sha256-AbScJXshYzbeUKHh+Y3OICc3iAtr+NqJ3Xb81GW+ptU=", + "lastModified": 1689192006, + "narHash": "sha256-QM0f0d8oPphOTYJebsHioR9+FzJcy1QNIzREyubB91U=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fd531dee22c9a3d4336cc2da39e8dd905e8f3de4", + "rev": "2de8efefb6ce7f5e4e75bdf57376a96555986841", "type": "github" }, "original": { @@ -82,11 +88,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1680213900, - "narHash": "sha256-cIDr5WZIj3EkKyCgj/6j3HBH4Jj1W296z7HTcWj1aMA=", + "lastModified": 1689192006, + "narHash": "sha256-QM0f0d8oPphOTYJebsHioR9+FzJcy1QNIzREyubB91U=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e3652e0735fbec227f342712f180f4f21f0594f2", + "rev": "2de8efefb6ce7f5e4e75bdf57376a96555986841", "type": "github" }, "original": { @@ -102,11 +108,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1680548519, - "narHash": "sha256-YduVpScBbfuv1cAiTBmlHzn1G0otfS48X34/SDhhByo=", + "lastModified": 1689271918, + "narHash": "sha256-p2VR7li1mVLaHcKiSlAtICxvOK9dZU6lr3cX8mTWsFI=", "owner": "Freed-Wu", "repo": "help2man", - "rev": "68624c3c3d6669f3c1b10016271cc0ebf4143e02", + "rev": "0e53eef211845d2ed534ec68bc9f40d4c7b6e37c", "type": "github" }, "original": { @@ -122,11 +128,11 @@ "python-help2man": "python-help2man" }, "locked": { - "lastModified": 1688645977, - "narHash": "sha256-LgOhvYgkYEd4kpjyJ3A/WAFAHrJimpPYdtH02KpG80c=", + "lastModified": 1689272108, + "narHash": "sha256-kxLZHdmz2U95iNR9FzTSYmL0nQyxbgFMnpltFEnZrOc=", "owner": "Freed-Wu", "repo": "setuptools-generate", - "rev": "40af73da1357f75d85b0d7381b2577e6a58b8d95", + "rev": "58aac3c2d784e33ec6606b722a330eb018fc1799", "type": "github" }, "original": { @@ -156,6 +162,36 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/requirements.txt b/requirements.txt index 6dd2fea..476eeae 100755 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,5 @@ # installing wxpython will install numpy # numpy piexif -pillow==9.3 +pillow>=9.3 wxpython diff --git a/src/mulimgviewer/gui/main_gui.py b/src/mulimgviewer/gui/main_gui.py index 63f33b5..11c2de5 100644 --- a/src/mulimgviewer/gui/main_gui.py +++ b/src/mulimgviewer/gui/main_gui.py @@ -685,69 +685,69 @@ class MulimgViewerGui ( wx.Frame ): self.m_menubar1 = wx.MenuBar( 0 ) self.m_menu1 = wx.Menu() self.m_menu11 = wx.Menu() - self.menu_open_sequential = wx.MenuItem( self.m_menu11, wx.ID_ANY, u"Sequential"+ u"\t" + u"Ctrl+E", u"one dir mul limg", wx.ITEM_NORMAL ) + self.menu_open_sequential = self.m_menu11.Append( wx.ID_ANY, u"Sequential"+ u"\t" + u"Ctrl+E", u"one dir mul limg", wx.ITEM_NORMAL ) self.m_menu11.Append( self.menu_open_sequential ) - self.menu_open_auto = wx.MenuItem( self.m_menu11, wx.ID_ANY, u"Parallel auto"+ u"\t" + u"Ctrl+A", u"one dir mul dir", wx.ITEM_NORMAL ) + self.menu_open_auto = self.m_menu11.Append( wx.ID_ANY, u"Parallel auto"+ u"\t" + u"Ctrl+A", u"one dir mul dir", wx.ITEM_NORMAL ) self.m_menu11.Append( self.menu_open_auto ) - self.menu_open_manual = wx.MenuItem( self.m_menu11, wx.ID_ANY, u"Parallel manual"+ u"\t" + u"Ctrl+M", u"one dir mul dir", wx.ITEM_NORMAL ) + self.menu_open_manual = self.m_menu11.Append( wx.ID_ANY, u"Parallel manual"+ u"\t" + u"Ctrl+M", u"one dir mul dir", wx.ITEM_NORMAL ) self.m_menu11.Append( self.menu_open_manual ) - self.menu_open_filelist = wx.MenuItem( self.m_menu11, wx.ID_ANY, u"Image File List"+ u"\t" + u"Ctrl+F", u"one dir mul dir", wx.ITEM_NORMAL ) + self.menu_open_filelist = self.m_menu11.Append( wx.ID_ANY, u"Image File List"+ u"\t" + u"Ctrl+F", u"one dir mul dir", wx.ITEM_NORMAL ) self.m_menu11.Append( self.menu_open_filelist ) self.m_menu1.AppendSubMenu( self.m_menu11, u"Open" ) - self.menu_output = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Select output path"+ u"\t" + u"Ctrl+O", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_output = self.m_menu1.Append( wx.ID_ANY, u"Select output path"+ u"\t" + u"Ctrl+O", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.menu_output ) - self.m_menuItem15 = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Input flist - Parallel manual"+ u"\t" + u"Ctrl+I", wx.EmptyString, wx.ITEM_NORMAL ) + self.m_menuItem15 = self.m_menu1.Append( wx.ID_ANY, u"Input flist - Parallel manual"+ u"\t" + u"Ctrl+I", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.m_menuItem15 ) - self.m_menuItem16 = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Save flist - Parallel manual"+ u"\t" + u"Ctrl+P", wx.EmptyString, wx.ITEM_NORMAL ) + self.m_menuItem16 = self.m_menu1.Append( wx.ID_ANY, u"Save flist - Parallel manual"+ u"\t" + u"Ctrl+P", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.m_menuItem16 ) self.m_menubar1.Append( self.m_menu1, u"File" ) self.m_menu2 = wx.Menu() - self.menu_next = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Next"+ u"\t" + u"Ctrl+N", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_next = self.m_menu2.Append( wx.ID_ANY, u"Next"+ u"\t" + u"Ctrl+N", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_next ) - self.menu_last = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Last"+ u"\t" + u"Ctrl+L", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_last = self.m_menu2.Append( wx.ID_ANY, u"Last"+ u"\t" + u"Ctrl+L", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_last ) - self.menu_save = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Save"+ u"\t" + u"Ctrl+S", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_save = self.m_menu2.Append( wx.ID_ANY, u"Save"+ u"\t" + u"Ctrl+S", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_save ) - self.menu_refresh = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Refresh"+ u"\t" + u"Ctrl+R", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_refresh = self.m_menu2.Append( wx.ID_ANY, u"Refresh"+ u"\t" + u"Ctrl+R", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_refresh ) - self.menu_hidden = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"hidden"+ u"\t" + u"Ctrl+H", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_hidden = self.m_menu2.Append( wx.ID_ANY, u"hidden"+ u"\t" + u"Ctrl+H", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_hidden ) - self.menu_up = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Up", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_up = self.m_menu2.Append( wx.ID_ANY, u"Up", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_up ) - self.menu_down = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Down", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_down = self.m_menu2.Append( wx.ID_ANY, u"Down", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_down ) - self.menu_right = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"Right", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_right = self.m_menu2.Append( wx.ID_ANY, u"Right", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_right ) - self.menu_left = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"left", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_left = self.m_menu2.Append( wx.ID_ANY, u"left", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_left ) - self.menu_delete_box = wx.MenuItem( self.m_menu2, wx.ID_ANY, u"delete_box", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_delete_box = self.m_menu2.Append( wx.ID_ANY, u"delete_box", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu2.Append( self.menu_delete_box ) self.m_menubar1.Append( self.m_menu2, u"Edit" ) self.m_menu3 = wx.Menu() - self.index_table = wx.MenuItem( self.m_menu3, wx.ID_ANY, u"Index table"+ u"\t" + u"F2", wx.EmptyString, wx.ITEM_NORMAL ) + self.index_table = self.m_menu3.Append( wx.ID_ANY, u"Index table"+ u"\t" + u"F2", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu3.Append( self.index_table ) - self.menu_about = wx.MenuItem( self.m_menu3, wx.ID_ANY, u"About"+ u"\t" + u"F1", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_about = self.m_menu3.Append( wx.ID_ANY, u"About"+ u"\t" + u"F1", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu3.Append( self.menu_about ) self.m_menubar1.Append( self.m_menu3, u"Help" ) diff --git a/src/mulimgviewer/gui/path_select_gui.py b/src/mulimgviewer/gui/path_select_gui.py index 1385bd4..710bb5e 100644 --- a/src/mulimgviewer/gui/path_select_gui.py +++ b/src/mulimgviewer/gui/path_select_gui.py @@ -49,13 +49,13 @@ class PathSelectFrameGui ( wx.Frame ): fgSizer1.Fit( self ) self.m_menubar1 = wx.MenuBar( 0 ) self.m_menu1 = wx.Menu() - self.m_menuItem1 = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Clear all path"+ u"\t" + u"CTRL+A", wx.EmptyString, wx.ITEM_NORMAL ) + self.m_menuItem1 = self.m_menu1.Append( wx.ID_ANY, u"Clear all path"+ u"\t" + u"CTRL+A", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.m_menuItem1 ) - self.m_menuItem2 = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Clear last path"+ u"\t" + u"CTRL+Z", wx.EmptyString, wx.ITEM_NORMAL ) + self.m_menuItem2 = self.m_menu1.Append( wx.ID_ANY, u"Clear last path"+ u"\t" + u"CTRL+Z", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.m_menuItem2 ) - self.menu_close = wx.MenuItem( self.m_menu1, wx.ID_ANY, u"Close"+ u"\t" + u"Alt+C", wx.EmptyString, wx.ITEM_NORMAL ) + self.menu_close = self.m_menu1.Append( wx.ID_ANY, u"Close"+ u"\t" + u"Alt+C", wx.EmptyString, wx.ITEM_NORMAL ) self.m_menu1.Append( self.menu_close ) self.m_menubar1.Append( self.m_menu1, u"Edit" )