在wxpython中,我希望有一个带有图片的窗口,该窗口会根据工具栏按钮的使用而改变图片的顶部的文本控件。当我单击工具栏按钮时,我将发布一个擦除背景事件,然后捕获擦除事件,并从那里重绘新的背景(基于此)。
大部分工作良好,除了文本控件停止绘制一旦我重画背景。它们还在那里,只是没有画出来。
下面是一个演示该问题的简化代码。如果运行此代码并单击按钮以切换是否绘制背景图像,则文本控件将消失。提示:
import wx import wx.lib.inspection class PanelWithDrawing(wx.Panel): def __init__(self, parent): super(PanelWithDrawing, self).__init__(parent, size=(100, 40)) self.showbmp = False self.txt = wx.TextCtrl(self, pos=(10, 10)) def onErase(self, dc): if self.showbmp: # dc.DrawBitmap(wx.Bitmap('background.png', 0, 0) dc.DrawRectangle(0, 0, 40, 40) # use a drawing instead so you don't have to find a png class Toolbar(wx.ToolBar): def __init__(self, parent): super(Toolbar, self).__init__(parent, -1) self.AddLabelTool(wx.ID_SAVE, "Record", wx.Bitmap("picture.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "") class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.toolbar = Toolbar(self) self.SetToolBar(self.toolbar) self.toolbar.Realize() self.panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) self.panel1 = PanelWithDrawing(self.panel) vbox.Add(self.panel1) # self.panel2 = PanelWithText(self.panel) # vbox.Add(self.panel2) self.panel.SetSizer(vbox) self.Centre() self.Show() self.toolbar.Bind(wx.EVT_TOOL, self.onButton) self.panel1.Bind(wx.EVT_ERASE_BACKGROUND, self.onErase) def onErase(self, evt): try: dc = evt.GetDC() except: dc = wx.ClientDC(self) rect = self.GetUpdateRegion().GetBox() dc.SetClippingRect(rect) dc.Clear() self.panel1.onErase(dc) def onButton(self, evt): self.panel1.showbmp = not self.panel1.showbmp wx.PostEvent(self.panel1, wx.PyCommandEvent(wx.wxEVT_ERASE_BACKGROUND)) if __name__ == '__main__': app = wx.App() Example(None, title='Example') wx.lib.inspection.InspectionTool().Show() # use this for debugging GUI design app.MainLoop()
我如何告诉wxpython再次绘制所有非背景的东西?或者,我如何不在第一时间取消绘制它?
经过几天的努力,我得到了!答案很简单(和往常一样)。
null
我在发布要绘制到屏幕的擦除背景事件时遇到麻烦。在我的完整代码中,我想在单击按钮时绘制一个位图(dc.drawBitmap())。我通过发布一个由自定义绑定方法捕获的EVT_ERASE_BACKGROUND事件来实现这一点。但是,一旦它在那个方法中,正常工作的event.getDc()方法就会失败。 下面是一个简化的代码,也有相同的结果: null 我该怎么解决这个?
OracleDoc说泛型是在java中使用调用类型擦除的技术实现的,这就是它的工作原理。 如果类型参数是无界的,则用其边界或对象替换泛型类型中的所有类型参数。因此,生成的字节码只包含普通类、接口和方法 所以,如果我有一个通用类说容器如下: 通过类型擦除处理后,它的等效类将如下所示: 如果这里有错误,请纠正我 类似地,如果a修改上述类,如下所示 这不会相当于??? 如果这是真的,那么我也应该有这样的
我有一个这样定义的方法: 我的单元测试我错误地这样测试它: 这应该会产生编译时错误(当我尝试使用javac编译它时,它会产生编译时错误),但eclipse允许它编译。 我真的不明白为什么eclipse允许这段代码编译,有人能提供一些信息吗,为什么这会在eclipse中编译? eclipse版本是:面向Web开发人员的eclipse Java EE IDE。版本:Luna Service Relea
当显示主片段时,我试图清除后堆栈中的所有片段。在导航图中,我添加了这个动作 在登录片段中。我尝试了findNavController()。导航(LoginFragmentDirections.actionLoginFragmentToHomeFragment()) 和 我从这里的文件中了解到https://developer.android.com/guide/navigation/navigat
问题内容: 我以为Java擦除会在编译时消除泛型类型,但是当我自己对其进行测试时,我意识到在Bytecode中有一些有关泛型类型的信息。 这是我的测试: 我写了2节课: 和 我编译了两个类,并在通用类的某个地方看到了这一行 在非泛型类中: 所以很明显我在字节码中有通用信息,那么这个擦除的东西是什么? 问题答案: 一些通用类型信息存储在属性中。请参阅JLS 4.8 和4.6以及JVM规范4.3.4。
在Canvas上绘制确实是很有趣的事情,但当你画错了或者想要清除画布和绘制其他图形时,应该如何做呢? 有两个方法可以使用:1.clearRect方法和2.重新设置画布宽高。我们首先学习2D渲染上下文的clearRect方法。 clearRect方法 假设你在Canvas上只画了一个正方形和圆形: context.fillRect(40, 40, 100, 100); context.be