擅长:python、mysql、java
<p>如果我明白你想做什么,那就太难了。</p>
<p>设置窗口属性可以很好地使窗口透明。代码属性中有一个小问题,以连字符开头,但如果不是这样,您就解决了:</p>
<pre><code>self.Box.attributes("-alpha", .30)
</code></pre>
<p>不过,听起来你希望<code>Box</code>成为图形窗口的嵌入部分,而不是它自己的顶层窗口,用户可以拖动它,等等。不幸的是,Tkinter没有任何子窗口的概念,它没有暴露足够的本地内容,你需要通过创建一个不可移动的窗口和手动移动它以跟踪另一个窗口的移动。所以,你没有窗口,这意味着你没有窗口透明度。</p>
<p>显然,<code>Box</code>是某种小部件,比如<code>Frame</code>或<code>Canvas</code>。但是小部件没有透明度。</p>
<p><code>Box</code>可以只是绘制到与<code>Graph</code>相同的<code>Canvas</code>上的元素的集合。这看起来很有希望……但是没有一种方法处理α透明度。(其中一些确实处理了全部或全部透明,但这没有帮助。)</p>
<p><em>处理透明度的一件事是<code>PhotoImage</code>。所以,如果你把<code>Box</code>从屏幕上画出来,得到结果内容作为<code>PhotoImage</code>,添加alpha(例如,通过PIL),然后<code>create_image</code>结果…关闭,但不抽雪茄。根据底层Tk库的设置,Tkinter可能只绘制具有1位透明度的像素映射,或者完全忽略透明度。(尝试在PIL中加载alpha透明的PNG文件并在画布上绘制它们。)因此,除非您希望某个应用程序在某些系统上看起来正确,在其他系统上根本不绘制长方体,在其他系统上绘制不透明,否则这是一个死胡同。</p>
<p>那么,还剩下什么?仅手动合成:在单独的屏幕外窗口上绘制<code>Graph</code>和<code>Box</code>,获取像素,使用PIL合成它们,然后<code>create_image</code>得到结果。</p>
<p>在这一点上,你可能最好使用一些像PIL的ImageDraw或者更强大的库来构建pixmap。或者,当然,使用比Tk更强大的GUI库,比如Qt或wx。</p>