可以打开并查看图片,点击工具栏上 Previous 和 Next 按钮来浏览 前/下 一张。仅仅是一个例子,其它按钮和菜单未添加命令。

package require Ttk
package require Img
package require base64
package require BWidget
package require Thread
package require Ttraceset icon(import) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAg1JREFUeNp8U0FME0EUfTM7s9AWkhKTpcSrePBkCB4gYAwHPXCQyEEkwQs3z57VaEKIiVdveCEpBGoLBBBOYLh4NASORNGDaThQFNva7u74Z3bbbrXwmt/+nZn/+v6ft0wpBY219fVT1/OSyvcRrGjojIEzBsbYyYOxMQcRmFr9peN9LqcuQz6fV5lsNv0vAW9iI3z5ekzxLYxjszafTsNxHAwNDDzK5HILURIeFashhICUQejcHKIWqq6L7lQKw4ODE9mVlUytTkT0hASW7tfkvvLN7/XeXiwtL9OzwtTkpFY7/j9BCIs3CCz6FIsl3OrvN1E/wyxcSMAtAV2viWxh0wGJatGv78s4R0J2XEwgBDcK2mUMs6uvsPl5g26S11vknCNmt2N05t4iPU60bIFTQZuUpnjm8RQqbgWe75EjGIQlEW8j8szaw9YElmVIAm0c5+UC7ve9aDrzYX8W4Xwb19gg4CYCMJyV8/W9ub0nmH6XxO/KKRAOuqGgtkDSdQtBOcN59Sww06enmB5+i2QihZ9/vpu9JgV6OMEMeI3LtOOyksn3f2xj4+ANxvueoeQVDH2TAnLbL3JYpzaLdl5cJGiQNpjw8Xr3Lpyuqzg82cbhzhaudPaQFwJiVnsH6OpuGu9EMPL89mLc7rgGxcJ/VMbynFK37H7cfLl1J0qAFrhBEUNrFKj26K8AAwCgT9EiWWDEHQAAAABJRU5ErkJggg==
}set icon(export) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgVJREFUeNp8k0tPE1EUx//3MSMtEF1VPgC4MCxc4AJijdGoCzdEFmITMfET4M6diSbatWHtxqQ0trZIkJi4MOzcwRcgUhcmjQlteHQS5nE998xMmUrxPz1zH3PPb845cyqMMbBa39joBGF4yUQR4h0rOxOQQkAI8efh/HwBGbGvvVn71Gya/6ndbpt6o1H5FyAHaKSfey2yX4m1eO9DpYJCoYAbs7OP683mahYis8Faaa3hOLHZOR+iFPwgwOWJCRTn5hYba2v11E9n4kkAyubL88hEPF6ZmsLHWo3WBk9KJRvtwllAIiVPAYquXs/D9ZkZtv4ZoXAuQCoN629BrnbpgAO/F/WfO3mJUWfsfIDWkiMYcXIof36NzZ0vtJb8OeN6SIy4Lh68uV+l5eLQFOyhC47Dzm+XlhBQb1A3MMiYkAHl2vojC5BnAErF1aefoFx7J4e4N/0cvzu7eL+1jLvTyzjw9rmgw4uoJEURc6n/cHSyj+qPF3hafIcQcS26Xruf0ikgqbym0KVIADQeBwfY3vvGzs+KK7x/5HcYPgCQyVvTt6cF88IuVkqtgSh9HCeFzQKEOKQOG7e52c7L61G4FI1RPsrf7yAMA+pWw0Uez12kMY5ApP8B+nTXuHcyuv3yZjXvjk0aI9g5rYsk58DztzZffb2VBWCIrpLlMFxd8t39K8AAxyfX6zUxRPMAAAAASUVORK5CYII=
}set icon(open) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaFJREFUeNqkU88vA0EU/mZ2WiElfobERfwBLiIhcfA/OLkicXSU4OJQcSc9ceQiEkcu4ibiUhWkxKb1o6qyqVLbre7OerMqWqlkpS/59n2T9743M2/2Mdd1UY+JkxVWM8AZBsiN1wjtSBex730FYYrQ9zuLkjA4JxdzhQKypolpvQOGYWL9NMQpPETYUHnsKIzw8OzuPBwHrivhyko4X17FypwxhujmzDJpF7wTOBKaEsuPYpVQVog9XvaaFoCnIQvQl6tF9c5/i79PojRB4fUJwqaFtG0Y8UMU354BVYw69AVJa/Lyh3PO1c6jpF2iQyQEFRVWLg2bknpGJnw9Xe/Y5PB7Ru++2J5fFTZdK288QGtqg5VJw89/wRjHc/z43rJxrgqIbEpHV/8gbGqkH9OCDUjfnKVNC5eiJCHyuVf0sIDvAk7Jeksl9SeN415Q/wJaYztsy6ROS18FjFT8MVfANVFXEGkJNXfSk3Bwjfu4P8OdfvVydovY2h49YzSB5OtW5OA/A6RncB3Zh060VU1SUJHyXPg1h2ARiqzecf4UYAAOUhKfHcZJBAAAAABJRU5ErkJggg==
}set icon(settings) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAs1JREFUeJx9U11Ik2EYPTp1ueXU5dLpMvMnsEjnJq7yB5WyMEgIlTQVRU1YA/MiVpgEilPvugjUK2mKdhFNNiy0lQOxtilp7sJkKeq+YWvCN/Sz+bP2dpNh/p3L85xznsMDDwBAIpHkRkdHX8DRCKipqbmv1+vHNBrNRwDB/01LSko6JiYmfmVlZV05zN3Z2dlLCCEURf3OzMxU/KX9AZzY1bBbW1t14+PjVgC8vea0tLQcmqaJ2+0m1dXV7bt8V1fXy6Kiogd7tb6FhYUvVCrVWwABu2R+fn4lTdPE4XAQk8m0KJVKZUqlstnj8ZC8vLzaA3UrKip6GhsbNQBYABATEyObn58nNpuNrKysEIqitmmaJmaz2R0SEpLkuz9ArVbX0jRN6uvrewAENDQ0yLlcLgDA6/WCzWb72+12tLS0dLtcrhmfw44GwK+urq6/oKAgQya7LGTWXFCp2nTLFLUYFhYmNBqNI1arVQ1gy++IAHZKcgo3NjZOSK/+wLuxyYXuvj453G5qv5C1n+DxePzBwUHtpaSk69ubGzDZdvCZnRoqPHuO/31Mpz02QCDgRKjVAzpxcko6L+gkDIZR+6Nei3PdL5wfJ04Vh0dGnl4wDg8d2lkoFEaPDI9MLy0tE6fTSSwWy6ZIFHETQCInt8kmaZ4k5W9+kozapva9PhYAiESieK1W+z4+ISERIPB6vSgtLX04Ozs3AGB1x/bFvOYbcdsbKOAkXL2WEciGxz7zaQwAWDwej6/RaPT9/a+mGGZtXSwWn6mqquoYHR1t+7fGu23bsU9/XWOJChB4in0+PS/XZ8tFO+amTFAoFI83NjaIQqF4ZjAYvsnl8teHHRcAECi4w7313C1tNpPyQZok5BbfRVlZ2ROGYQjDMESpVA5h3y8cACeqIrhYTVKfflgPjbl4AwCCsrOz5RKJpBIA91jzLkLi77G4UTkA8AemGSncz8QQ2gAAAABJRU5ErkJggg==
}set icon(help) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM2SURBVDiNbZNbbFRlFIW/8//nWlEawIZOofQ27YBOqVOCBU1TLkYt+qKihsSEmBgTKwZJTCdBjGmirRck8UENiRHS+OCDCaBHI4KO1aAFaRla24Jjp2KdoS1Qe5lpp3bO70NLA8Gd7JedvVfWXllLU0pxYxVvawkAzwB1QHB+3AVEgNa4G+67cV+7DlC8rUUAjYtyzFd3PrrOvifgE5Xl+QCcv5ik80LCO3Ts18xkeqYJeDvuhr0FgPnjtvuqikItLz3snIoOcKI9Rk//MABrSvJ4oMbPxrWrCL//9dRPnQMdQG3cDXv6PJPGTetKQ2/uesjZs/9Lro2l2fvcZir9+aSnZvihI06r28nxX2K8u+cR55UDbvWPHfFGoJmi+uZAcPt7qb+Hx9TT4U9VUX2zerHliMpmPdXTP6RGx9NKKaVOno6pmp0fqYa3vlCJkXEV3L4/XVTfHJC5/q0vv/Dkhk2j42nt0LGzABiGzmfHz3PYPUd79188vuVuVi7P5fPvexkZTVG6YgklK5bKU9E/JwRQV1Xh0060xwCwTJ1Ll8dIXk1hWwZVFT4Arv6TxjB0chyLzt+HCK0uEFKIOh0IBsuWE72YxDAkpmlgWQaWaRAKFLB7x0aUUhw82oFjWwihkbgyyeriPDylgtdFRAgNQ9cxjbm2TIO9z9Zi6pLDX0XpuzRKjmMihMCxTDQ0NEAAXV2xy4QCBRiGnGNh6Cy+3WYgOcaZ3gRt0UEc28SxLXIck/LCZcQGryGk6BJA5NyFhLdlfRm6LtF1iWHoaELwc/cgp3uTSCmxbWMBpNKfR/cfQ14260UE0PrxkTOZDWtXsf6ulehSoktB7iKH3U/dS8Nj1eQ4JpZlYtsma4rvpMyXy4HWSEYp1SribrhvIpVp2vfBN1OvP7+ZUMCHlAIptQW/G/O6BAqX8ERtKa99+O30RCrTFHfDfTdZeWuNv/qNhgftaGyYaGyYxJVJbHvu58rSZZTkL6bp4Mlpt63n7My/s7VxN+zdEqY7brP37dpxv11V4dPKC5eiaRrxxCi/9Y9473zyXWZ8crop63k3h+n/4iylqFNKBQGklF2zs9mIUuqWOP8HZvdMlKLbimEAAAAASUVORK5CYII=
}set icon(about) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADYUlEQVR4nGJkQALKAZOZGBgZLQV5OCKE+DmtebnYpP79+8/w8cvPZ+8//zj66duPFQz/GY/f3ZDzD6YHAAAA//9ihDFUAqeICvNx1qspCCdLCHJzMLMwMfz9+5/hz99/DH/+/mX49uMPw+v3X388fvlp7pdvvxpvr895zcDAwAAAAAD//wBBAL7/AQAAAAAfTpEXIBgQnDEnGEwJCAQA+vv+AC4eBgAsHwwAAAAAANDe8gDH2fQAAP8BAPX3+QDd5e+06/D3ZN+xbekAAAD//wBBAL7/AR1LkAMWEguPOS0cbQkGBAD5/P0A//8AAG9RJAAPDw8AAAAAAPHx8QCEpdUA/P3+AP//AAD4+PwA2uPtk/P1+nEAAAD//wTBuQ2AMBAEwD0fEBBtQERGF67I/SI5R/QASKB7mCnTqHVb2VQF92swT3gE+vmAJEhiPy54JNwTnzmKChbObVCpPwAAAP//RNDRCYAgFIbRT0iuldF47hmuEDSGW0Sg9/exM8JZjs3Kmc3er/+bgvo0rrvhApeQBAGCoA9nX6OlFMsEAAD//zzQUQ2AUAhA0esmfshMYJUXwSZWsIyhzMIYAv55Ipx5W5cBExH1r57HjqoiIgCYGdf94J54JPEmWUV3jw8AAP//YuFgZ5X6/fcvw/9/DAxMTJBI6V3/iGFivg0DCwsLAwMDA8OXL18Ybtx/C9XEAHENAwMDIyOjFAAAAP//Yvn77x/Dv38MDL///GP49u0nw7vPPxg+fPnJwMHBwcDDwwP31e8/f5FinpGBEZoAAAAAAP//Yvn67deztx++ib9895Xh05efDH/+/WNgYmRk+PMHKUwgtjFgAc8AAAAA//9i+fDlx5F3n38Y/v7zl4GZiYmBhZkJm0Jc4AgAAAD//2L68/f/yr///v1kYWZiwG4JTvCTgYFhJQAAAP//YmJkZDjBxMg4C1lmc5szPAAZGBgYWFhYGDa3OaMbMIuBgeEEAAAA//9iZGBgYFAJnCLOwMAwh4GBwYdI27cwMDCk3Fmf8xIAAAD//2JiYGBguLM+5yUDA0MSAwPDVAYGhh94NP6AqkmC6mEAAAAA//9C8bVK4BQmBgYGSwYGhggGBgZrBgYGKajUMwYGhqMMDAwrGBgYjt9Zj8jOAAAAAP//AwBqPBucJP8EOQAAAABJRU5ErkJggg==
}set icon(detail) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVDjLpZPbSxtREMbzL4pSpYj1VilUmmpQSCKCSLAgihFTo9Eg0TRZY5LdxJgbKYo+2AstLRbU1nfxrlmTdLPJ55nZ+OCjyYGPYQ8zv/PN7DkmAKZGZGoakN5OKSeqPfAPtk9Ca8ew+g4xvPIHQ94DWJZ/Y3DxJ94v/ID54zf0z32BbXFPpToGODZOKrPpUzxX5pmdCgPo5HrUN7kNBtjW/qKe1TORMwDW1SPeeJ0ucMzlcshms0gmkyhqVSQSCVzmdSiKAlmWEQ6HOa/TkakBxMBolUQyFRRIpQruijp/3xR0XN/ruMiXcXar4fRG4/yOsaQBoGmzpa08x0wmg1QqhVgsxoBoNMoQSZIQCATg9/s5r300YQDoV9HS9Cr+l6vspFRzQgBVOCE3j06uVJ3zX47EDIBl6RdvdG9ec6Se4/E4QqEQA4LBIO5FSz6fD16vFx6Ph/PabLIBMM9/541ypYpyzQWpqD2VKiB54YJEq2VowwC8m/tqTFU+50i9RyIR7pUK6WSKbrcbLpcLTqeT85ot6wagf3a/rnvQNCjh8S1Ib6Z3+Wb1fviMLkcWr8bTYsqbPKg2u4JWawQvhsPCdkicLEHUkCQGNPwaGwU8AG9RQVkc+5PeAAAAAElFTkSuQmCC
}set icon(clear) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKXSURBVDiNlZJLaJRnFIaf75uZ6EwSm9tIQpNIvNWoFCsmiwrSgotKS3aCl4WL0Y2CIvwLBV0YFwYckFIQhI7GhWBLdaEL6Y0WMS20aTQxijGNmnFGSZPJZcw/80/+//uOK0VjIfisz/twzstRR75gczjEBRGixrL31A35kfdAhzTfr22OrdqworwxpLl6dJva+l4CYHFFVLO0KsLHLbFYSHP29H6lU0nVmUqq2gUFVugcfFJ0fSPU15QRXazqqxrpBY4DSxcUiPCN65mLtwbz7kzJp6mdypWtGzfE400vgLqFBEpEAOjap07EV3L8k7bPVXNLOz2nu73pf8Zy7FSTxsglEc4nHBn/X0EqqXZprb79dHNHtK6ugX+//punVx+y/ux2atdVkR7t9+7f/UOM9b4zRo4lHMnOF+zRmmRTfWs5lyRqJl22dG9lUY0GFYVQNX5Qzr3BX/2B/t8N4v9gDCng5usTUkm1KHKOOxXNtas6Lh8Oaf0cQg1gxsBksUEez7bgzdWQyQzI45EBd2oyW9SvVkk4UvJ301V7sLGkI2VgZyEYAZMF8x9e4RmzuevMjJ0jXo3a1P5VhVZKwm81UsHP2UxaW6tQ/ggiPv6ch1eapViYoVCYRkTQ4UrST3oDlPym38wnHHnmz02PpNN3mXFjTEyMksulmcxlcN0pRIRY9TYKRc3Qg/6SMThvCQACI4f6en8p+qzGdT2KxTzWBuhwDZXxHeTdmNy6eSVvTPBlwpHM6xLfpPuM6ln9UXvb8hWtES//J2WxNejIMh4N9wRDQ33j1vJZwpGHAOF30oAxdAw9+Ot25ZKGDz+oatOjo/f84eGfAmu869ZyIOHIxDufOJ9UUi1Tij6lEOCatZxMOPJ4/txLfgdDCCiEEtoAAAAASUVORK5CYII=
}set icon(exportLog) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhZJREFUeNqMU81LG1EQn/e12QUJNQfpCj0EhB6CrSI9JNeK5BAN4kHEe/8FwRZ6KFgoUnpoQRCEgl5KL4IHUTwUqof2ViiFkoo5KGvIVk2z2Ww+djsT4roVTB0YmHnvzW9m3m+G5RYWgIRzDppSaTSH4ZYSBMGWjDjpJ5OTi4/HxnJo9wyseZ79bHX19ZFlKdlsNC7Ph9Ojo7nfjtMzWIvF4P329tbPYvGDVKoo3Xo9vKygXf0PQB9j8HF390AIUWi12yBrtVp42fJ9aOJhL6E30Zh/ADiik94kvw4PwcEKsW3B0W9g+5wALpURALJxk5bLZZidmACNsT4B8ChoNrEC1w0zCASQnIc+/U+lUoGybcPZ+TnU0T8pleDLxsarVD6/iGxx6UYAJAIoIULfiMfB7O+Hh0NDoCsFIgL+fXNzKTk+/lx6nndVAT6IAhAjR5j9xLLgFDP/qVZhfmoK7pkm3M1kXmDLe9E5YFS+FgFIYAWk95PJjv92ba0TfGdk5CUG78QMY18GVwBSXGvhupgDA/B0eRmqrmsrKT+3cGIl0ODoemfIHGTCR56JypCRLrUM7fnpaZBSwtLKit+mebm4QAD6RF1P5bPZzLdCoVMBLhXESDUN9K6ST+fdKdGBJvj4GBtPJFKpbPZNybbPMHvQU5G3d+vrn5hpziBInIAYM4wHfHBw7tYr7Dg/fMv6SqtDRP0VYADYyf2IZe0cagAAAABJRU5ErkJggg==
}set icon(exit) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAp5JREFUeNp0U1tIFFEY/mbWMkRBd3UXQxNzFSlWlMWE0i3LLKKEfMygl6CMHTYfEguMqNCwh7Zm0oQgeughAkOMKLObZkFQVIRFdnETzJx1V3G3XWfn0jmDszhhh/nmv3z/95/hP3OY2NANLF/DTZzTc4v/ihXWShxrOM+aOAuBP9WRM07tv+L/caymaqAgD7+2zuNzn/bCVlnue3KA8xsc8Xl7TZXOUUviboNL0RQVjw+18Hnbq5sLPKWIjfahZL+HNvQNHfTRTSy5NVXeonq3zjl3V1OumXDKjpuXOOauPcOZZs8edx9tgDT2cum7WKS6tuJz/ygsq1eheJcbix9fgGyp06kuD15fuYP4bLiAme+/hkeHT/C2vAzv+goHGAbJJmvKawFVQfz9cFKsacC3N78RmloQdl6/yDGhvm6dGDzSxtty072FLpupCTSYxR+CCE9HhfreC5xeosoqKOqudnAzUxFh/J2IREyGHCf4I0GOSbpPc1/eigj+igq01tCl0JexZDBgbblISFHiqaZj1EiGsdohiwFluYZVSEBxj2vnHRVlXmdtJeRFsmPcDEVSUVK/BTllG3yk1m/oWJUc40DLGb+9wuUtqipF6PkD8smSqYnuxxYRfnofxZvLSJONPqLhqZbpsWYWplkzv29qrMXcyEMy9aWBEQSmE2DJRPMdKTDmyrAWZG3bg1e3BxGbmy9gAr1dGDjZ4bemW3x52YxeSMWTQRXhiCpQUVY6683PZpNNJmdVhBZUYV/nKY6lf+Le823HRVI8MaNClhRQG4xoAslzFNSfEAmXUBAQFYgLWg/NU23yLjScbeVmo9rlsWmAWhqbONLkE+HECAQSHzM45ofQaTquvvaudY3nWn+udJ0J5ySc6Tr/FWAAWrOVmqP8y7MAAAAASUVORK5CYII=
}set icon(save) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH+SURBVBgZBcE9i11VGAbQtc/sO0OCkqhghEREAwpWAWUg8aMVf4KFaJEqQtAipTZWViKiCGOh2Ap2gmJhlSIWFsFOxUK0EsUM3pl79n4f12qHb3z3Fh7D83gC95GOJsDe0ixLk5Qq/+xv/Lw9Xd+78/HLX3Y8fXTr2nWapy4eCFKxG7Fby97SnDlYtMbxthyfzHO//nl85fNvfvnk8MbX5xa8IHx1518Vkrj54Q+qQms2vVmWZjdiu5ZR2rT01166/NCZg/2PFjwSVMU6yjoC1oq+x6Y3VbHdlXWExPd379nf7Nmejv2Os6OC2O4KLK0RNn3RNCdr2Z5GJSpU4o+/TkhaJ30mEk5HwNuvX7Hpi76wzvjvtIwqVUSkyjqmpHS0mki8+9mPWmuWxqYvGkbFGCUAOH/+QevYI9GFSqmaHr5wkUYTAlGhqiRRiaqiNes6SOkwJwnQEqBRRRJEgkRLJGVdm6R0GLMQENE0EkmkSkQSVVMqopyuIaUTs0J455VLAAAAAODW0U/GiKT0pTWziEj44PZ1AAAAcPPqkTmH3QiJrlEVDXDt0qsAAAAAapa5BqUnyaw0Am7//gUAAAB49tEXzTmtM5KkV/y2G/X4M5fPao03n/sUAAAAwIX7y5yBv9vhjW/fT/IkuSp5gJKElKRISYoUiSRIyD1tufs/IXxui20QsKIAAAAASUVORK5CYII=
}set icon(next) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHUSURBVDiNpZKxixpREMa/dVeMq62lYBNio0fAyspGUWzEJaAhXboUKVOmzV+QLlyKkDpglUJXLUISELGSq2xSHLgE5T13WZ87b9LEJQl7B5IPHjMM3/wY5o3BzPgfWUlFx3G+a62/EdGr0Wh0vA+QSioy81W1Wn0J4Gu32314MUBrjXq9jl6v9ziXyy07nc7TSydAEAQoFApwHCdfLBY/tlqtd81mM/uv1xgOhzda60dEBK01zrHf78M0zRi4Xq+xXC7XRPRkMpmsY8BgMAhrtVomnU7DMIy/3vmHmBnMjN1uh8ViEUopX0yn0/cAkGJmCCEghMDhcIDv+/B9P86llJBSQggBwzBQqVQe5PP560ajcQ0AltYaq9UKtm0jm80ik8kglUrFyyQiKKUQBAF830cYhiAiZuZbALCYGWEYwjRNmKYJZo4jEeF0OkEphePxiCiKwMw/mfnZfD7/fJ7gxrbtqyiKsN/vwczQWqNUKoGIwMyIoghKKSil3N/Nt/ESk0653W6H5XI5o5SClBKe52ml1Gut9ZvZbKb/9CaeMjPDsix4noftdvuDiIau635J8t4J2Gw2EEJ8Yubnruvuknz3AVZCiA/j8fjtXY1nJe7gEv0Cn0ExX3uDYC0AAAAASUVORK5CYII=
}set icon(previous) {iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHTSURBVDiNpVO/q9pgFD33fpEQQnBwlnbppEOKU6mgkgiCKHTt3qHQsUPnFrq0c4f+AQpP3O3QYLooHR5du0iLoMUOBhNinvnxdXhon6Au74M7nXvPd++555KUEvd5yiWw2+0qzPxOCNEaDoePT+XwueJ2u/0AwDfTNN9IKc1zeScJWq3WM03TfnQ6nSfVahVZlp3t8miEZrOpEtHHYrH4yrZt6LqOMAxxSSfag5ZlPWLmK9M0zXK5DCICEQEABoMBmBnMDCEEhBBg5t+9Xu8hSSnRaDSe67r+uVKp6IVC4XY2vp3uLpGUElJKZFmGyWSCfr9PSq1W+2QYxstSqQQiwnq9Pvy2j7sEaZoiy7KDLgqAP0EQyOl0SqqqQtd1aJoGVVWhKMqh5X3xzc0NttvtQRd2XfetlLJJRH+TJEEYhvB9H0EQIAxDRFGEKIqw2+0QxzGSJEEcx/8JAMB13a8AygC+pGkKIgIzQ1EU5HI5LBYLLJdLrFYrbDabvQ4/j7YAAPV6nZj5tRDifT6fVwzDgKZpmM1mGI1GdGqNR0Yaj8fScZwPaZo+9Tzvl+/7IKKLPjjpRMdxvkspTc/zrubz+UWCw27PhWVZL2zbvj6H033P+R+JCADzIQVFMAAAAABJRU5ErkJggg==
}proc main { } {global lab iconset w .wm title $w "Example - Toolbar,Menu"set f [ frame $w.toolbar -relief ridge -borderwidth 1 ]pack $f -side top -anchor nw -fill x set sw [ ScrolledWindow .sw  ]pack $sw -side top -anchor nw -fill both -expand 1set sf [ ScrollableFrame .sf -bg black ]$sw setwidget $sfset f2 [ $sf getframe ]foreach val [ array names icon ] {set $val [ image create photo -data $icon($val) ]ttk::button $f.$val -image [ subst $$val ] -compound center -style Toolbutton}foreach separator { sp1 sp2 sp3 sp4 } {ttk::separator $f.$separator -orient vertical}$f.open config -command "openFile"$f.previous config -command "previous"$f.next config -command "next"$f.about config -command "About"pack $f.open -side left -padx 2 pack $f.save -side left -padx 2pack $f.sp1 -side left -ipady 7 -padx 2pack $f.import -side left -padx 2pack $f.export -side left -padx 2pack $f.sp2 -side left -ipady 7 -padx 2pack $f.settings -side left -padx 2pack $f.sp3 -side left -ipady 7 -padx 2ttk::checkbutton $f.b5 -image $detail -compound center -style Toolbuttonpack $f.b5 -side left -padx 2pack $f.exportLog -side left -padx 2pack $f.clear -side left -padx 2pack $f.sp4 -side left -ipady 7 -padx 2pack $f.help -side left -padx 2pack $f.about -side left -padx 2pack $f.previous -side left -padx 2pack $f.next -side left -padx 2set lab [ label $f2.lab1 -bd 0 -justify center -bg black ]pack $f2.lab1 -padx 2 -anchor nwmenu .menubar -tearoff 0  . config -menu .menubar foreach val { File View Settings About } {    set menu($val) [ menu .menubar.m$val -tearoff 0 ].menubar add cascade -label $val -menu $menu($val) -underline 0 }$menu(File) add command -label "Open..." -command "openFile" -underline 0 -image $open -compound left -accelerator "Ctrl+O"$menu(File) add command -label "Save..."  -underline 0 -image $save -compound left -accelerator "Ctrl+S"$menu(File) add command -label "Import..."  -underline 0 -image $import -compound left -accelerator "Ctrl+I"$menu(File) add command -label "Export..."  -underline 0 -image $export -compound left -accelerator "Ctrl+E"$menu(File) add separator$menu(File) add command -label Exit -command exit -underline 1 -image $exit -compound left$menu(View) add check -label "Aways on Top"$menu(View) add cascade -label "Zoom" -menu $menu(View).zoom$menu(View) add command -label "Workwrap"$menu(View) add command -label "Back" -command "previous" -image $previous -compound leftmenu $menu(View).zoom -tearoff 0$menu(View).zoom add radio -label "Zoom Out" -underline 0$menu(View).zoom add radio -label "Zoom In" -underline 0$menu(Settings) add command -label "Preferences..." -underline 0 -image $settings -compound left -accelerator "Ctrl+P"$menu(About) add command -label Help -underline 0 -image $help -compound left$menu(About) add separator$menu(About) add command -label About -command "About" -underline 0 -image $about -compound leftbind . <Control-o> "openFile"bind . <Key-Right> "next"bind . <Key-Left> "previous"    bind . <MouseWheel> {if { %D >= 0 } {previous} else {next}}focus -force $w
}proc SelectNextImageFrame {w interval} {global animationCallbackscatch { set animationCallbacks [ after $interval SelectNextImageFrame $w $interval ]set image [ $w cget -image ]set idx -1scan [ $image cget -format ] "GIF -index %d" idxif {[catch {$image config -format "GIF -index [ incr idx ]"}]} then {$image config -format "GIF -index 0"}} result
}proc animateLabelImage {w interval} {global animationCallbacks pathcatch { set animationCallbacks [ after $interval SelectNextImageFrame $w $interval ]} resulttrace variable path w ReadOnlyTrace
}proc ReadOnlyTrace { varName index op } {global animationCallbackscatch {after cancel $animationCallbacksunset animationCallbacks} result
}proc openFile {{file ""}} {global lab pathif { $file == "" } {set types {{{Image Files}       {*.jpg;*.gif;*.bmp;*.png;*.pcx;*.ico;*.tiff;*.raw;*.ppm}   }}set file [ tk_getOpenFile -parent . -title "Open image file" -filetypes $types ]}set path $fileset err [ catch { set bd [ open $file { RDWR BINARY } ]} result ]if { $err != 0 } {return}set data [ read $bd nonewline ]close $bdset imageData [ base64::encode $data ]set image [ image create photo -data $imageData ]$lab config -image $imageif {[ string tolower [ file extension $file ]] == ".gif" } {animateLabelImage $lab 100}
}proc previous { } {global pathif {![ info exists path ] || $path == "" } {return}set list [ glob [ file dir $path ]/{*.jpg,*.gif,*.bmp,*.png,*.pcx,*.ico,*.tiff,*.raw,*.ppm}]set pos [ lsearch $list $path ]if { $pos != 0 } {incr pos -1} else {set pos end}set path [ lindex $list $pos ]openFile $path
}proc next { } {global pathif {![ info exists path ] || $path == "" } {return}set list [ glob [ file dir $path ]/{*.jpg,*.gif,*.bmp,*.png,*.pcx,*.ico,*.tiff,*.raw,*.ppm}]set pos [ lsearch $list $path ]if { $pos != [ expr {[llength $list ] - 1}] } {incr pos 1} else {set pos 0}set path [ lindex $list $pos ]openFile $path
}proc About { } {set msg " \n This is an example for toolbar and menu.\n\It also can preview image!\n\n\Tcl/tk application.\n\Author\t: Andy_Wen\n\Email\t: wn0112@gmail.com"tk_messageBox -type ok -title "About" -icon info -message $msg}proc popErr { str } {tk_messageBox -type ok -title "Error" -icon error -message "$str"
}mainif { [ lindex $argv 0 ] != "" } {openFile [ lindex $argv 0 ]
}

Tcl/tk实例-工具栏和菜单-图片预览工具相关推荐

  1. 图片预览工具不存在_如何维护所有工具,使它们永远(几乎)永远存在

    图片预览工具不存在 Tools can be pretty expensive. If you want to get the most bang for your buck, it's import ...

  2. Mac实用技巧 |如何使用Mac系统中自带的预览工具将图片变成黑白色?

    Mac系统中没有安装ps,现在却想将一张图片变成黑白色,该怎么办呢?我们可以使用Mac系统自带的图片预览工具来改变图片颜色哦,不会的小伙伴们看过来~ 具体步骤如下: 1.双击要编辑的图片,如果修改了系 ...

  3. 原生js实现ajax的文件异步提交功能、图片预览功能.实例

    采用html5使得选择图片改变时,预览框中图片随之改变.input文件选择框美化.原生js完成文件异步提交 效果图: 代码如下,可直接复制并保存为html文件打开查看效果 <html> & ...

  4. vue+vant使用图片预览功能ImagePreview的问题

    如果您搜到这篇文章的话,那员外估计您遇到跟我一样的问题了,即在打开图片预览功能后,如果不关闭预览的图片,同时改变路由的话,会发现即使路由改变了,预览的图片还在文档的最顶层显示,如图: 着实让员外百思不 ...

  5. 适用于各浏览器支持图片预览,无刷新异步批量上传js插件(2)

    之前写的这个上传插件,同事们都觉得还不错,不过都觉得还不够完美,于是决定使用业余时间对此插件持续优化,可能你过段时间会发现,插件又增加了新功能什么的,请注意文章后面评论里的更新说明. 以前在上传的时候 ...

  6. 【实战】前端必会技巧 —— window.open 实现图片预览而非下载

    文章目录 一.问题 二.解决 三.其他尝试 四.拓展学习 1.window.open 语法 实例 2.document.write 语法 实例 一.问题 多个 图片 url (用逗号分隔开) 图片 u ...

  7. v-viewer预览图的使用(图片预览旋转/放大缩小/上下切换等)

    前言: 之前项目需求,需要找一个预览图的组件,最开始,找了vue-preview组件.因为vue-preview是直接引入 < vue-preview>这个标签,无法看到对组件里面的图片i ...

  8. jquery实现上传图片及图片大小验证、图片预览效果代码

    jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...

  9. dw按钮图片滚动js_使用 React Hooks 实现仿石墨的图片预览插件(巨详细)

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 作者:DARRELL https://juejin.im/post/5e9bf299f265 ...

最新文章

  1. 2018-2019-1 20165234 实验三 并发程序
  2. 菜鸟学SSH(十五)——简单模拟Hibernate实现原理
  3. CentOS6.5 安装python
  4. [zz]cocos2d-x如何优化内存的应用
  5. 59. Spiral Matrix Spiral Matrix II
  6. 服务器win10系统开机慢,Win10系统开机慢怎么办 windows10开机慢的解决方法
  7. 网络安全要学python_请问入门网络安全要学什么?
  8. 2020-08-31 ubuntu18.04下安装gitlab,以及使用邮箱注册
  9. 数学建模常用模型04 :灰色关联分析法
  10. SpringBoot修改启动横幅标语(banner)
  11. 【源码】自主机器人路径规划仿真器(FAMU-FSU工程学院自主移动机器人项目)
  12. vscode造成c盘空间占用剧增
  13. Golang 数组的一些自问自答
  14. 计算机研究生论文期刊,经典计算机研究生小论文参考文献 计算机研究生小核心期刊参考文献哪里找...
  15. vue-cli3使用webpack-spritesmith配置雪碧图
  16. 【学习OpenCV4】案例3:OpenCV Python语言开发环境搭建
  17. python中cv2.putText参数详解
  18. 《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)
  19. [hihocoder]1238 : Total Highway Distance
  20. python进行基本的图像处理

热门文章

  1. STM32学习笔记——CH340一键下载电路
  2. HTML5+CSS大作业——明星个人主页(15页) 创作主页
  3. 01.数据库之清理表数据
  4. 那些工作后补过的大学知识
  5. jQuery树形控件zTree使用小结
  6. pythonreader下载_使用Python的pandas-datareader包下载雅虎财经股价数据
  7. 如何判断对方列表里是不是好友_如何判断qq好友是不是删了你
  8. 昨天是运气不好 今天是心情不好
  9. HTML新年趣味小程序,推荐10款春节必备小程序,让你欢欢喜喜过新年
  10. 基于Redis组件之分布式RateLimiter限流