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

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

package require Ttk
package require Img
package require base64
package require BWidget
package require Thread
package require Ttrace

set icon(import) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
	bWFnZVJlYWR5ccllPAAAAg1JREFUeNp8U0FME0EUfTM7s9AWkhKTpcSrePBkCB4gYAwHPXCQyEEk
	wQs3z57VaEKIiVdveCEpBGoLBBBOYLh4NASORNGDaThQFNva7u74Z3bbbrXwmt/+nZn/+v6ft0wp
	BY219fVT1/OSyvcRrGjojIEzBsbYyYOxMQcRmFr9peN9LqcuQz6fV5lsNv0vAW9iI3z5ekzxLYxj
	szafTsNxHAwNDDzK5HILURIeFashhICUQejcHKIWqq6L7lQKw4ODE9mVlUytTkT0hASW7tfkvvLN
	7/XeXiwtL9OzwtTkpFY7/j9BCIs3CCz6FIsl3OrvN1E/wyxcSMAtAV2viWxh0wGJatGv78s4R0J2
	XEwgBDcK2mUMs6uvsPl5g26S11vknCNmt2N05t4iPU60bIFTQZuUpnjm8RQqbgWe75EjGIQlEW8j
	8szaw9YElmVIAm0c5+UC7ve9aDrzYX8W4Xwb19gg4CYCMJyV8/W9ub0nmH6XxO/KKRAOuqGgtkDS
	dQtBOcN59Sww06enmB5+i2QihZ9/vpu9JgV6OMEMeI3LtOOyksn3f2xj4+ANxvueoeQVDH2TAnLb
	L3JYpzaLdl5cJGiQNpjw8Xr3Lpyuqzg82cbhzhaudPaQFwJiVnsH6OpuGu9EMPL89mLc7rgGxcJ/
	VMbynFK37H7cfLl1J0qAFrhBEUNrFKj26K8AAwCgT9EiWWDEHQAAAABJRU5ErkJggg==
}

set icon(export) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
	bWFnZVJlYWR5ccllPAAAAgVJREFUeNp8k0tPE1EUx//3MSMtEF1VPgC4MCxc4AJijdGoCzdEFmIT
	MfET4M6diSbatWHtxqQ0trZIkJi4MOzcwRcgUhcmjQlteHQS5nE998xMmUrxPz1zH3PPb845cyqM
	MbBa39joBGF4yUQR4h0rOxOQQkAI8efh/HwBGbGvvVn71Gya/6ndbpt6o1H5FyAHaKSfey2yX4m1
	eO9DpYJCoYAbs7OP683mahYis8Faaa3hOLHZOR+iFPwgwOWJCRTn5hYba2v11E9n4kkAyubL88hE
	PF6ZmsLHWo3WBk9KJRvtwllAIiVPAYquXs/D9ZkZtv4ZoXAuQCoN629BrnbpgAO/F/WfO3mJUWfs
	fIDWkiMYcXIof36NzZ0vtJb8OeN6SIy4Lh68uV+l5eLQFOyhC47Dzm+XlhBQb1A3MMiYkAHl2voj
	C5BnAErF1aefoFx7J4e4N/0cvzu7eL+1jLvTyzjw9rmgw4uoJEURc6n/cHSyj+qPF3hafIcQcS26
	Xruf0ikgqbym0KVIADQeBwfY3vvGzs+KK7x/5HcYPgCQyVvTt6cF88IuVkqtgSh9HCeFzQKEOKQO
	G7e52c7L61G4FI1RPsrf7yAMA+pWw0Uez12kMY5ApP8B+nTXuHcyuv3yZjXvjk0aI9g5rYsk58Dz
	tzZffb2VBWCIrpLlMFxd8t39K8AAxyfX6zUxRPMAAAAASUVORK5CYII=
}

set icon(open) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
	bWFnZVJlYWR5ccllPAAAAaFJREFUeNqkU88vA0EU/mZ2WiElfobERfwBLiIhcfA/OLkicXSU4OJQ
	cSc9ceQiEkcu4ibiUhWkxKb1o6qyqVLbre7OerMqWqlkpS/59n2T9743M2/2Mdd1UY+JkxVWM8AZ
	BsiN1wjtSBex730FYYrQ9zuLkjA4JxdzhQKypolpvQOGYWL9NMQpPETYUHnsKIzw8OzuPBwHrivh
	yko4X17FypwxhujmzDJpF7wTOBKaEsuPYpVQVog9XvaaFoCnIQvQl6tF9c5/i79PojRB4fUJwqaF
	tG0Y8UMU354BVYw69AVJa/Lyh3PO1c6jpF2iQyQEFRVWLg2bknpGJnw9Xe/Y5PB7Ru++2J5fFTZd
	K288QGtqg5VJw89/wRjHc/z43rJxrgqIbEpHV/8gbGqkH9OCDUjfnKVNC5eiJCHyuVf0sIDvAk7J
	eksl9SeN415Q/wJaYztsy6ROS18FjFT8MVfANVFXEGkJNXfSk3Bwjfu4P8OdfvVydovY2h49YzSB
	5OtW5OA/A6RncB3Zh060VU1SUJHyXPg1h2ARiqzecf4UYAAOUhKfHcZJBAAAAABJRU5ErkJggg==
}

set icon(settings) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAs1JREFU
	eJx9U11Ik2EYPTp1ueXU5dLpMvMnsEjnJq7yB5WyMEgIlTQVRU1YA/MiVpgEilPvugjUK2mKdhFN
	Niy0lQOxtilp7sJkKeq+YWvCN/Sz+bP2dpNh/p3L85xznsMDDwBAIpHkRkdHX8DRCKipqbmv1+vH
	NBrNRwDB/01LSko6JiYmfmVlZV05zN3Z2dlLCCEURf3OzMxU/KX9AZzY1bBbW1t14+PjVgC8vea0
	tLQcmqaJ2+0m1dXV7bt8V1fXy6Kiogd7tb6FhYUvVCrVWwABu2R+fn4lTdPE4XAQk8m0KJVKZUql
	stnj8ZC8vLzaA3UrKip6GhsbNQBYABATEyObn58nNpuNrKysEIqitmmaJmaz2R0SEpLkuz9ArVbX
	0jRN6uvrewAENDQ0yLlcLgDA6/WCzWb72+12tLS0dLtcrhmfw44GwK+urq6/oKAgQya7LGTWXFCp
	2nTLFLUYFhYmNBqNI1arVQ1gy++IAHZKcgo3NjZOSK/+wLuxyYXuvj453G5qv5C1n+DxePzBwUHt
	paSk69ubGzDZdvCZnRoqPHuO/31Mpz02QCDgRKjVAzpxcko6L+gkDIZR+6Nei3PdL5wfJ04Vh0dG
	nl4wDg8d2lkoFEaPDI9MLy0tE6fTSSwWy6ZIFHETQCInt8kmaZ4k5W9+kozapva9PhYAiESieK1W
	+z4+ISERIPB6vSgtLX04Ozs3AGB1x/bFvOYbcdsbKOAkXL2WEciGxz7zaQwAWDwej6/RaPT9/a+m
	GGZtXSwWn6mqquoYHR1t+7fGu23bsU9/XWOJChB4in0+PS/XZ8tFO+amTFAoFI83NjaIQqF4ZjAY
	vsnl8teHHRcAECi4w7313C1tNpPyQZok5BbfRVlZ2ROGYQjDMESpVA5h3y8cACeqIrhYTVKfflgP
	jbl4AwCCsrOz5RKJpBIA91jzLkLi77G4UTkA8AemGSncz8QQ2gAAAABJRU5ErkJggg==
}

set icon(help) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0
	U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM2SURBVDiNbZNbbFRlFIW/8//nWlEawIZO
	ofQ27YBOqVOCBU1TLkYt+qKihsSEmBgTKwZJTCdBjGmirRck8UENiRHS+OCDCaBHI4KO1aAFaRla
	24Jjp2KdoS1Qe5lpp3bO70NLA8Gd7JedvVfWXllLU0pxYxVvawkAzwB1QHB+3AVEgNa4G+67cV+7
	DlC8rUUAjYtyzFd3PrrOvifgE5Xl+QCcv5ik80LCO3Ts18xkeqYJeDvuhr0FgPnjtvuqikItLz3s
	nIoOcKI9Rk//MABrSvJ4oMbPxrWrCL//9dRPnQMdQG3cDXv6PJPGTetKQ2/uesjZs/9Lro2l2fvc
	Zir9+aSnZvihI06r28nxX2K8u+cR55UDbvWPHfFGoJmi+uZAcPt7qb+Hx9TT4U9VUX2zerHliMpm
	PdXTP6RGx9NKKaVOno6pmp0fqYa3vlCJkXEV3L4/XVTfHJC5/q0vv/Dkhk2j42nt0LGzABiGzmfH
	z3PYPUd79188vuVuVi7P5fPvexkZTVG6YgklK5bKU9E/JwRQV1Xh0060xwCwTJ1Ll8dIXk1hWwZV
	FT4Arv6TxjB0chyLzt+HCK0uEFKIOh0IBsuWE72YxDAkpmlgWQaWaRAKFLB7x0aUUhw82oFjWwih
	kbgyyeriPDylgtdFRAgNQ9cxjbm2TIO9z9Zi6pLDX0XpuzRKjmMihMCxTDQ0NEAAXV2xy4QCBRiG
	nGNh6Cy+3WYgOcaZ3gRt0UEc28SxLXIck/LCZcQGryGk6BJA5NyFhLdlfRm6LtF1iWHoaELwc/cg
	p3uTSCmxbWMBpNKfR/cfQ14260UE0PrxkTOZDWtXsf6ulehSoktB7iKH3U/dS8Nj1eQ4JpZlYtsm
	a4rvpMyXy4HWSEYp1SribrhvIpVp2vfBN1OvP7+ZUMCHlAIptQW/G/O6BAqX8ERtKa99+O30RCrT
	FHfDfTdZeWuNv/qNhgftaGyYaGyYxJVJbHvu58rSZZTkL6bp4Mlpt63n7My/s7VxN+zdEqY7brP3
	7dpxv11V4dPKC5eiaRrxxCi/9Y9473zyXWZ8crop63k3h+n/4iylqFNKBQGklF2zs9mIUuqWOP8H
	ZvdMlKLbimEAAAAASUVORK5CYII=
}

set icon(about) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADYUlEQVR4nGJkQALKAZOZGBgZLQV5
	OCKE+DmtebnYpP79+8/w8cvPZ+8//zj66duPFQz/GY/f3ZDzD6YHAAAA//9ihDFUAqeICvNx1qsp
	CCdLCHJzMLMwMfz9+5/hz99/DH/+/mX49uMPw+v3X388fvlp7pdvvxpvr895zcDAwAAAAAD//wBB
	AL7/AQAAAAAfTpEXIBgQnDEnGEwJCAQA+vv+AC4eBgAsHwwAAAAAANDe8gDH2fQAAP8BAPX3+QDd
	5e+06/D3ZN+xbekAAAD//wBBAL7/AR1LkAMWEguPOS0cbQkGBAD5/P0A//8AAG9RJAAPDw8AAAAA
	APHx8QCEpdUA/P3+AP//AAD4+PwA2uPtk/P1+nEAAAD//wTBuQ2AMBAEwD0fEBBtQERGF67I/SI5
	R/QASKB7mCnTqHVb2VQF92swT3gE+vmAJEhiPy54JNwTnzmKChbObVCpPwAAAP//RNDRCYAgFIbR
	T0iuldF47hmuEDSGW0Sg9/exM8JZjs3Kmc3er/+bgvo0rrvhApeQBAGCoA9nX6OlFMsEAAD//zzQ
	UQ2AUAhA0esmfshMYJUXwSZWsIyhzMIYAv55Ipx5W5cBExH1r57HjqoiIgCYGdf94J54JPEmWUV3
	jw8AAP//YuFgZ5X6/fcvw/9/DAxMTJBI6V3/iGFivg0DCwsLAwMDA8OXL18Ybtx/C9XEAHENAwMD
	IyOjFAAAAP//Yvn77x/Dv38MDL///GP49u0nw7vPPxg+fPnJwMHBwcDDwwP31e8/f5FinpGBEZoA
	AAAAAP//Yvn67deztx++ib9895Xh05efDH/+/WNgYmRk+PMHKUwgtjFgAc8AAAAA//9i+fDlx5F3
	n38Y/v7zl4GZiYmBhZkJm0Jc4AgAAAD//2L68/f/yr///v1kYWZiwG4JTvCTgYFhJQAAAP//YmJk
	ZDjBxMg4C1lmc5szPAAZGBgYWFhYGDa3OaMbMIuBgeEEAAAA//9iZGBgYFAJnCLOwMAwh4GBwYdI
	27cwMDCk3Fmf8xIAAAD//2JiYGBguLM+5yUDA0MSAwPDVAYGhh94NP6AqkmC6mEAAAAA//9C8bVK
	4BQmBgYGSwYGhggGBgZrBgYGKajUMwYGhqMMDAwrGBgYjt9Zj8jOAAAAAP//AwBqPBucJP8EOQAA
	AABJRU5ErkJggg==
}

set icon(detail) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
	U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVDjLpZPbSxtREMbzL4pSpYj1VilU
	mmpQSCKCSLAgihFTo9Eg0TRZY5LdxJgbKYo+2AstLRbU1nfxrlmTdLPJ55nZ+OCjyYGPYQ8zv/PN
	7DkmAKZGZGoakN5OKSeqPfAPtk9Ca8ew+g4xvPIHQ94DWJZ/Y3DxJ94v/ID54zf0z32BbXFPpToG
	ODZOKrPpUzxX5pmdCgPo5HrUN7kNBtjW/qKe1TORMwDW1SPeeJ0ucMzlcshms0gmkyhqVSQSCVzm
	dSiKAlmWEQ6HOa/TkakBxMBolUQyFRRIpQruijp/3xR0XN/ruMiXcXar4fRG4/yOsaQBoGmzpa08
	x0wmg1QqhVgsxoBoNMoQSZIQCATg9/s5r300YQDoV9HS9Cr+l6vspFRzQgBVOCE3j06uVJ3zX47E
	DIBl6RdvdG9ec6Se4/E4QqEQA4LBIO5FSz6fD16vFx6Ph/PabLIBMM9/541ypYpyzQWpqD2VKiB5
	4YJEq2VowwC8m/tqTFU+50i9RyIR7pUK6WSKbrcbLpcLTqeT85ot6wagf3a/rnvQNCjh8S1Ib6Z3
	+Wb1fviMLkcWr8bTYsqbPKg2u4JWawQvhsPCdkicLEHUkCQGNPwaGwU8AG9RQVkc+5PeAAAAAElF
	TkSuQmCC
}

set icon(clear) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0
	U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKXSURBVDiNlZJLaJRnFIaf75uZ6EwSm9tI
	QpNIvNWoFCsmiwrSgotKS3aCl4WL0Y2CIvwLBV0YFwYckFIQhI7GhWBLdaEL6Y0WMS20aTQxijGN
	mnFGSZPJZcw/80/+//uOK0VjIfisz/twzstRR75gczjEBRGixrL31A35kfdAhzTfr22Ordqworwx
	pLl6dJva+l4CYHFFVLO0KsLHLbFYSHP29H6lU0nVmUqq2gUFVugcfFJ0fSPU15QRXazqqxrpBY4D
	SxcUiPCN65mLtwbz7kzJp6mdypWtGzfE400vgLqFBEpEAOjap07EV3L8k7bPVXNLOz2nu73pf8Zy
	7FSTxsglEc4nHBn/X0EqqXZprb79dHNHtK6ugX+//punVx+y/ux2atdVkR7t9+7f/UOM9b4zRo4l
	HMnOF+zRmmRTfWs5lyRqJl22dG9lUY0GFYVQNX5Qzr3BX/2B/t8N4v9gDCng5usTUkm1KHKOOxXN
	tas6Lh8Oaf0cQg1gxsBksUEez7bgzdWQyQzI45EBd2oyW9SvVkk4UvJ301V7sLGkI2VgZyEYAZMF
	8x9e4RmzuevMjJ0jXo3a1P5VhVZKwm81UsHP2UxaW6tQ/ggiPv6ch1eapViYoVCYRkTQ4UrST3oD
	lPym38wnHHnmz02PpNN3mXFjTEyMksulmcxlcN0pRIRY9TYKRc3Qg/6SMThvCQACI4f6en8p+qzG
	dT2KxTzWBuhwDZXxHeTdmNy6eSVvTPBlwpHM6xLfpPuM6ln9UXvb8hWtES//J2WxNejIMh4N9wRD
	Q33j1vJZwpGHAOF30oAxdAw9+Ot25ZKGDz+oatOjo/f84eGfAmu869ZyIOHIxDufOJ9UUi1Tij6l
	EOCatZxMOPJ4/txLfgdDCCiEEtoAAAAASUVORK5CYII=
}

set icon(exportLog) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
	bWFnZVJlYWR5ccllPAAAAhZJREFUeNqMU81LG1EQn/e12QUJNQfpCj0EhB6CrSI9JNeK5BAN4kHE
	e/8FwRZ6KFgoUnpoQRCEgl5KL4IHUTwUqof2ViiFkoo5KGvIVk2z2Ww+djsT4roVTB0YmHnvzW9m
	3m+G5RYWgIRzDppSaTSH4ZYSBMGWjDjpJ5OTi4/HxnJo9wyseZ79bHX19ZFlKdlsNC7Ph9Ojo7nf
	jtMzWIvF4P329tbPYvGDVKoo3Xo9vKygXf0PQB9j8HF390AIUWi12yBrtVp42fJ9aOJhL6E30Zh/
	ADiik94kvw4PwcEKsW3B0W9g+5wALpURALJxk5bLZZidmACNsT4B8ChoNrEC1w0zCASQnIc+/U+l
	UoGybcPZ+TnU0T8pleDLxsarVD6/iGxx6UYAJAIoIULfiMfB7O+Hh0NDoCsFIgL+fXNzKTk+/lx6
	nndVAT6IAhAjR5j9xLLgFDP/qVZhfmoK7pkm3M1kXmDLe9E5YFS+FgFIYAWk95PJjv92ba0TfGdk
	5CUG78QMY18GVwBSXGvhupgDA/B0eRmqrmsrKT+3cGIl0ODoemfIHGTCR56JypCRLrUM7fnpaZBS
	wtLKit+mebm4QAD6RF1P5bPZzLdCoVMBLhXESDUN9K6ST+fdKdGBJvj4GBtPJFKpbPZNybbPMHvQ
	U5G3d+vrn5hpziBInIAYM4wHfHBw7tYr7Dg/fMv6SqtDRP0VYADYyf2IZe0cagAAAABJRU5ErkJg
	gg==
}

set icon(exit) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
	bWFnZVJlYWR5ccllPAAAAp5JREFUeNp0U1tIFFEY/mbWMkRBd3UXQxNzFSlWlMWE0i3LLKKEfMyg
	l6CMHTYfEguMqNCwh7Zm0oQgeughAkOMKLObZkFQVIRFdnETzJx1V3G3XWfn0jmDszhhh/nmv3z/
	95/hP3OY2NANLF/DTZzTc4v/ihXWShxrOM+aOAuBP9WRM07tv+L/caymaqAgD7+2zuNzn/bCVlnu
	e3KA8xsc8Xl7TZXOUUviboNL0RQVjw+18Hnbq5sLPKWIjfahZL+HNvQNHfTRTSy5NVXeonq3zjl3
	V1OumXDKjpuXOOauPcOZZs8edx9tgDT2cum7WKS6tuJz/ygsq1eheJcbix9fgGyp06kuD15fuYP4
	bLiAme+/hkeHT/C2vAzv+goHGAbJJmvKawFVQfz9cFKsacC3N78RmloQdl6/yDGhvm6dGDzSxtty
	072FLpupCTSYxR+CCE9HhfreC5xeosoqKOqudnAzUxFh/J2IREyGHCf4I0GOSbpPc1/eigj+igq0
	1tCl0JexZDBgbblISFHiqaZj1EiGsdohiwFluYZVSEBxj2vnHRVlXmdtJeRFsmPcDEVSUVK/BTll
	G3yk1m/oWJUc40DLGb+9wuUtqipF6PkD8smSqYnuxxYRfnofxZvLSJONPqLhqZbpsWYWplkzv29q
	rMXcyEMy9aWBEQSmE2DJRPMdKTDmyrAWZG3bg1e3BxGbmy9gAr1dGDjZ4bemW3x52YxeSMWTQRXh
	iCpQUVY6683PZpNNJmdVhBZUYV/nKY6lf+Le823HRVI8MaNClhRQG4xoAslzFNSfEAmXUBAQFYgL
	Wg/NU23yLjScbeVmo9rlsWmAWhqbONLkE+HECAQSHzM45ofQaTquvvaudY3nWn+udJ0J5ySc6Tr/
	FWAAWrOVmqP8y7MAAAAASUVORK5CYII=
}

set icon(save) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0
	U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH+SURBVBgZBcE9i11VGAbQtc/sO0OCkqhg
	hEREAwpWAWUg8aMVf4KFaJEqQtAipTZWViKiCGOh2Ap2gmJhlSIWFsFOxUK0EsUM3pl79n4f12qH
	b3z3Fh7D83gC95GOJsDe0ixLk5Qq/+xv/Lw9Xd+78/HLX3Y8fXTr2nWapy4eCFKxG7Fby97SnDlY
	tMbxthyfzHO//nl85fNvfvnk8MbX5xa8IHx1518Vkrj54Q+qQms2vVmWZjdiu5ZR2rT01166/NCZ
	g/2PFjwSVMU6yjoC1oq+x6Y3VbHdlXWExPd379nf7Nmejv2Os6OC2O4KLK0RNn3RNCdr2Z5GJSpU
	4o+/TkhaJ30mEk5HwNuvX7Hpi76wzvjvtIwqVUSkyjqmpHS0mki8+9mPWmuWxqYvGkbFGCUAOH/+
	QevYI9GFSqmaHr5wkUYTAlGhqiRRiaqiNes6SOkwJwnQEqBRRRJEgkRLJGVdm6R0GLMQENE0Ekmk
	SkQSVVMqopyuIaUTs0J455VLAAAAAODW0U/GiKT0pTWziEj44PZ1AAAAcPPqkTmH3QiJrlEVDXDt
	0qsAAAAAapa5BqUnyaw0Am7//gUAAAB49tEXzTmtM5KkV/y2G/X4M5fPao03n/sUAAAAwIX7y5yB
	v9vhjW/fT/IkuSp5gJKElKRISYoUiSRIyD1tufs/IXxui20QsKIAAAAASUVORK5CYII=
}

set icon(next) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
	AAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHUSURB
	VDiNpZKxixpREMa/dVeMq62lYBNio0fAyspGUWzEJaAhXboUKVOmzV+QLlyKkDpglUJXLUISELGS
	q2xSHLgE5T13WZ87b9LEJQl7B5IPHjMM3/wY5o3BzPgfWUlFx3G+a62/EdGr0Wh0vA+QSioy81W1
	Wn0J4Gu32314MUBrjXq9jl6v9ziXyy07nc7TSydAEAQoFApwHCdfLBY/tlqtd81mM/uv1xgOhzda
	60dEBK01zrHf78M0zRi4Xq+xXC7XRPRkMpmsY8BgMAhrtVomnU7DMIy/3vmHmBnMjN1uh8ViEUop
	X0yn0/cAkGJmCCEghMDhcIDv+/B9P86llJBSQggBwzBQqVQe5PP560ajcQ0AltYaq9UKtm0jm80i
	k8kglUrFyyQiKKUQBAF830cYhiAiZuZbALCYGWEYwjRNmKYJZo4jEeF0OkEphePxiCiKwMw/mfnZ
	fD7/fJ7gxrbtqyiKsN/vwczQWqNUKoGIwMyIoghKKSil3N/Nt/ESk0653W6H5XI5o5SClBKe52ml
	1Gut9ZvZbKb/9CaeMjPDsix4noftdvuDiIau635J8t4J2Gw2EEJ8Yubnruvuknz3AVZCiA/j8fjt
	XY1nJe7gEv0Cn0ExX3uDYC0AAAAASUVORK5CYII=
}

set icon(previous) {
	iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
	AAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHTSURB
	VDiNpVO/q9pgFD33fpEQQnBwlnbppEOKU6mgkgiCKHTt3qHQsUPnFrq0c4f+AQpP3O3QYLooHR5d
	u0iLoMUOBhNinvnxdXhon6Au74M7nXvPd++555KUEvd5yiWw2+0qzPxOCNEaDoePT+XwueJ2u/0A
	wDfTNN9IKc1zeScJWq3WM03TfnQ6nSfVahVZlp3t8miEZrOpEtHHYrH4yrZt6LqOMAxxSSfag5Zl
	PWLmK9M0zXK5DCICEQEABoMBmBnMDCEEhBBg5t+9Xu8hSSnRaDSe67r+uVKp6IVC4XY2vp3uLpGU
	ElJKZFmGyWSCfr9PSq1W+2QYxstSqQQiwnq9Pvy2j7sEaZoiy7KDLgqAP0EQyOl0SqqqQtd1aJoG
	VVWhKMqh5X3xzc0NttvtQRd2XfetlLJJRH+TJEEYhvB9H0EQIAxDRFGEKIqw2+0QxzGSJEEcx/8J
	AMB13a8AygC+pGkKIgIzQ1EU5HI5LBYLLJdLrFYrbDabvQ4/j7YAAPV6nZj5tRDifT6fVwzDgKZp
	mM1mGI1GdGqNR0Yaj8fScZwPaZo+9Tzvl+/7IKKLPjjpRMdxvkspTc/zrubz+UWCw27PhWVZL2zb
	vj6H033P+R+JCADzIQVFMAAAAABJRU5ErkJggg==	
}

proc main { } {
	global lab icon
	set 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 1
	set sf [ ScrollableFrame .sf -bg black ]
	$sw setwidget $sf
	set 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 2
	pack $f.sp1 -side left -ipady 7 -padx 2
	pack $f.import -side left -padx 2
	pack $f.export -side left -padx 2
	pack $f.sp2 -side left -ipady 7 -padx 2
	pack $f.settings -side left -padx 2
	pack $f.sp3 -side left -ipady 7 -padx 2
	ttk::checkbutton $f.b5 -image $detail -compound center -style Toolbutton
	pack $f.b5 -side left -padx 2
	pack $f.exportLog -side left -padx 2
	pack $f.clear -side left -padx 2
	pack $f.sp4 -side left -ipady 7 -padx 2
	pack $f.help -side left -padx 2
	pack $f.about -side left -padx 2
	pack $f.previous -side left -padx 2
	pack $f.next -side left -padx 2

	set lab [ label $f2.lab1 -bd 0 -justify center -bg black ]
	pack $f2.lab1 -padx 2 -anchor nw

	menu .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 left
	menu $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 left

	bind .  "openFile"
	bind .  "next"
	bind .  "previous"	
	bind .  {
		if { %D >= 0 } {
			previous
		} else {
			next
		}
	}
	focus -force $w
}

proc SelectNextImageFrame {w interval} {
	global animationCallbacks
	catch { set animationCallbacks [ after $interval SelectNextImageFrame $w $interval ]
	set image [ $w cget -image ]
	set idx -1
	scan [ $image cget -format ] "GIF -index %d" idx
	if {[catch {
		$image config -format "GIF -index [ incr idx ]"
	}]} then {
		$image config -format "GIF -index 0"
	}} result
}

proc animateLabelImage {w interval} {
	global animationCallbacks path
	catch { set animationCallbacks [ after $interval SelectNextImageFrame $w $interval ]} result
	trace variable path w ReadOnlyTrace
}

proc ReadOnlyTrace { varName index op } {
	global animationCallbacks
	catch {
		after cancel $animationCallbacks
		unset animationCallbacks
	 } result
}

proc openFile {{file ""}} {
	global lab path

	if { $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 $file
	set err [ catch { set bd [ open $file { RDWR BINARY } ]} result ]
	if { $err != 0 } {
		return
	}
	set data [ read $bd nonewline ]
	close $bd
	set imageData [ base64::encode $data ]
	set image [ image create photo -data $imageData ]
	$lab config -image $image

	if {[ string tolower [ file extension $file ]] == ".gif" } {
		animateLabelImage $lab 100
	}
}

proc previous { } {
	global path
	if {![ 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 path
	if {![ 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: [email protected]"
	tk_messageBox -type ok -title "About" -icon info -message $msg

}

proc popErr { str } {
	tk_messageBox -type ok -title "Error" -icon error -message "$str"
}

main

if { [ lindex $argv 0 ] != "" } {
	openFile [ lindex $argv 0 ]
}


 



你可能感兴趣的:(Tcl/tk实例-工具栏和菜单-图片预览工具)