python画图程序

2023-05-16

 


#!/usr/bin/python
# -*- coding: utf-8 -*
import wx
import wx.lib.buttons  as buttons
import wx.adv   as adv
import wx.lib.colourselect as color
import wx.html
import os
import pickle
import math


class ControlPanel(wx.Panel):
    BMP_SIZE = 16
    BMP_BORDER = 3
    NUM_COLS = 4
    SPACING = 4
    colorList = ('Black', 'Yellow', 'Red', 'Green', 'Blue',
                 'Purple', 'Brown', 'Aquamarine', 'Forest Green',
                 'Light Blue', 'Goldenrod', 'Cyan',
                 'Orange', 'Navy', 'Dark Grey', 'Light Grey')
    maxThickness = 16

    def __init__(self, parent, ID, sketch):
        wx.Panel.__init__(self, parent, ID, style=wx.RAISED_BORDER)
        self.sketch = sketch
        buttonSize = (self.BMP_SIZE + 2 * self.BMP_BORDER,
                      self.BMP_SIZE + 2 * self.BMP_BORDER)
        colorGrid = self.createColorGrid(parent, buttonSize)
        thicknessGrid = self.createThicknessGrid(buttonSize)
        self.layout(colorGrid, thicknessGrid)

    def createColorGrid(self, parent, buttonSize):  # 1 创建颜色网格
        self.colorMap = {}
        self.colorButtons = {}
        colorGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
        for eachColor in self.colorList:
            bmp = parent.MakeBitmap(eachColor)

            b = buttons.GenBitmapToggleButton(self, -1, bmp, size=buttonSize)
            b.SetBezelWidth(1)
            b.SetUseFocusIndicator(False)
            self.Bind(wx.EVT_BUTTON, self.OnSetColour, b)
            colorGrid.Add(b, 0)
            self.colorMap[b.GetId()] = eachColor
            self.colorButtons[eachColor] = b
        self.colorButtons[self.colorList[0]].SetToggle(True)
        return colorGrid

    def createThicknessGrid(self, buttonSize):  # 2 创建线条粗细网格
        self.thicknessIdMap = {}
        self.thicknessButtons = {}
        thicknessGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
        for x in range(1, self.maxThickness + 1):
            b = buttons.GenToggleButton(self, -1, str(x), size=buttonSize)
            b.SetBezelWidth(1)
            b.SetUseFocusIndicator(False)
            self.Bind(wx.EVT_BUTTON, self.OnSetThickness, b)
            thicknessGrid.Add(b, 0)
            self.thicknessIdMap[b.GetId()] = x
            self.thicknessButtons[x] = b
        self.thicknessButtons[1].SetToggle(True)
        return thicknessGrid

    def layout(self, colorGrid, thicknessGrid):  # 3 合并网格
        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(colorGrid, 0, wx.ALL, self.SPACING)
        box.Add(thicknessGrid, 0, wx.ALL, self.SPACING)
        self.SetSizer(box)
        box.Fit(self)

    def OnSetColour(self, event):
        color = self.colorMap[event.GetId()]
        if color != self.sketch.color:
            self.colorButtons[self.sketch.color].SetToggle(False)
        self.sketch.SetColor(color)

    def OnSetThickness(self, event):
        thickness = self.thicknessIdMap[event.GetId()]
        if thickness != self.sketch.thickness:
            self.thicknessButtons[self.sketch.thickness].SetToggle(False)
        self.sketch.SetThickness(thickness)


class SketchAbout(wx.Dialog):
    text = '''
    <html>
        <body bgcolor="#ACAA60">
            <center>
                <table bgcolor="#455481" width="100%" cellspacing="0"  cellpadding="0" border="1">
                    <tr>
                        <td align="center">
                            <h1>Sketch!</h1>
                        </td>
                    </tr>
                </table>
            </center>
            <p>
                <b>Sketch</b> is a demonstration program for <b>wxPython In Action</b>
                Chapter 7. It is based on the SuperDoodle demo included with wxPython,
                available at http://www.wxpython.org/
                </p>
                <p><b>SuperDoodle</b> and <b>wxPython</b> are brought to you by
                <b>Robin Dunn</b> and <b>Total Control Software</b>, Copyright
                ? 1997-2006.
            </p>
        </body>
    </html>
    '''

    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, 'About Sketch', size=(440, 400))
        html = wx.html.HtmlWindow(self)
        html.SetPage(self.text)
        button = wx.Button(self, wx.ID_OK, "Okay")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(html, 1, wx.EXPAND | wx.ALL, 5)
        sizer.Add(button, 0, wx.ALIGN_CENTER | wx.ALL, 5)
        self.SetSizer(sizer)
        self.Layout()


class SketchWindow(wx.Window):
    def __init__(self, parent, ID):
        wx.Window.__init__(self, parent, ID)
        self.SetBackgroundColour("White")
        self.color = "Black"
        self.thickness = 2
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
        self.lines = []
        self.curLine = []
        self.pos = (0, 0)
        self.InitBuffer()

        # 绑定时间
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
        self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
        self.Bind(wx.EVT_MOTION, self.OnMotion)
        self.Bind(wx.EVT_SIZE, self.OnSize)
        self.Bind(wx.EVT_IDLE, self.OnIdle)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

    def InitBuffer(self):
        size = self.GetClientSize()
        # 创建一个缓存的设备上下文
        self.buffer = wx.Bitmap(size.width, size.height)
        dc = wx.BufferedDC(None, self.buffer)
        # use device content
        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
        dc.Clear()
        self.DrawLines(dc)
        self.reInitBuffer = False

    def GetLinesData(self):
        return self.lines[:]

    def SetLinesData(self, lines):
        self.lines = lines[:]
        self.InitBuffer()
        self.Refresh()

    def OnLeftDown(self, event):
        self.curLine = []
        self.pos = tuple(event.GetPosition())
        self.CaptureMouse()

    def OnLeftUp(self, event):
        if self.HasCapture():
            self.lines.append((self.color, self.thickness, self.curLine))
        # newPos = tuple(event.GetPosition())
        # dc = wx.ClientDC(self)
        # dc.DrawCircle(self.pos[0],self.pos[1], math.sqrt(math.pow(self.pos[0]-newPos[0],2)+pow(self.pos[1]-newPos[1],2)))
        self.curLine = []
        self.ReleaseMouse()

    def OnMotion(self, event):

        if event.Dragging() and event.LeftIsDown():
            dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
            self.drawMotion(dc, event)
            event.Skip()

    def drawMotion(self, dc, event):
        dc.SetPen(self.pen)
        newPos = tuple(event.GetPosition())
        coords = self.pos + newPos
        self.curLine.append(coords)
        self.pos = newPos
        dc.DrawLine(*coords)

    def OnSize(self, event):
        self.reInitBuffer = True

    def OnIdle(self, event):
        if self.reInitBuffer:
            self.InitBuffer()
            self.Refresh(False)

    def OnPaint(self, event):
        dc = wx.BufferedPaintDC(self, self.buffer)
        self.DrawLines(dc)

    def DrawLines(self, dc):
        for colour, thickness, line in self.lines:
            pen = wx.Pen(colour, self.thickness, wx.SOLID)
            dc.SetPen(pen)
            for coords in line:
                dc.DrawLine(*coords)

    def SetColor(self, color):
        self.color = color
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)

    def SetThickness(self, num):
        self.thickness = num
        self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)


class SketchFrame(wx.Frame):
    def __init__(self, parent):
        self.title = "Sketch Frame"
        wx.Frame.__init__(self, parent, -1, self.title, size=(800, 600))
        self.filename = ""
        self.wildcard = "Sketch files(*.sketch)|*.sketch|Text files(*.txt)|*.txt|All files (*.*)|*.*"
        self.sketch = SketchWindow(self, -1)
        self.sketch.Bind(wx.EVT_MOTION, self.OnSketchMotion)
        self.createToolBar()#创建工具栏
        self.initStatusBar()#初始化状态栏
        self.createMenuBar()#创建菜单栏
        self.createPanel()#创建颜色面板
    def createToolBar(self):  # 1创建工具栏
        toolbar = self.CreateToolBar()
        # toolbar.AddSimpleTool(1, wx.Image('new.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')
        # toolbar.AddSimpleTool(2, wx.Image('open.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Opne', '')
        # toolbar.AddSimpleTool(3, wx.Image('save.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Save', '')
        # toolbar.AddSimpleTool(1, wx.Image('new.bmp', wx.BITMAP_TYPE_BMP).ConvertToBitmap(), 'New', '')
        # toolbar.AddSimpleTool(2, wx.Image('open.bmp', wx.BITMAP_TYPE_BMP).ConvertToBitmap(), 'Opne', '')
        # toolbar.AddSimpleTool(3, wx.Image('save.bmp', wx.BITMAP_TYPE_BMP).ConvertToBitmap(), 'Save', '')
        for each in self.toolbarData():
            self.createSimpleTool(toolbar, *each)
        toolbar.AddSeparator()
        # for each in self.toolbarColorData():
        #     self.createColorTool(toolbar, each)
        toolbar.Realize()  # 2 显现工具栏

    def createSimpleTool(self, toolbar, label, filename, help, handler):  # 3 创建常规工具
        if not label:
            toolbar.AddSeparator()
            return
        bmp = wx.Image(filename,wx.BITMAP_TYPE_PNG).ConvertToBitmap()
        tool = toolbar.AddSimpleTool(-1, bmp, label, help)
        self.Bind(wx.EVT_MENU, handler, tool)

    def toolbarData(self):
        return (("New", "new.png", "Create new sketch",
                 self.OnNew),
                ("", "", "", ""),
                ("Open", "open.png", "Open existing sketch",
                 self.OnOpen),
                ("Save", "save.png", "Save existing sketch",
                 self.OnSave))

    def createColorTool(self, toolbar, color):  # 4 创建颜色工具
        bmp = self.MakeBitmap(color)
        newId = wx.NewId()
        tool = toolbar.AddRadioTool(newId, bmp.ConvertToBitmap(), shortHelp=color)
        self.Bind(wx.EVT_MENU, self.OnColor, tool)

    def MakeBitmap(self, color):  # 5 创建纯色的位图
        bmp = wx.Bitmap(16, 15)
        dc = wx.MemoryDC()
        dc.SelectObject(bmp)
        dc.SetBackground(wx.Brush(color))
        dc.Clear()
        dc.SelectObject(wx.NullBitmap)
        return bmp

    def toolbarColorData(self):
        return ("Black", "Red", "Green", "Blue")

    def createPanel(self):
        controlPanel = ControlPanel(self, -1, self.sketch)
        box = wx.BoxSizer(wx.HORIZONTAL)
        box.Add(controlPanel, 0, wx.EXPAND)  # 控制面板在水平方向上不改变
        box.Add(self.sketch, 1, wx.EXPAND)  # 窗口在水平方向上改变
        # box.SetSizeHints(self)
        self.SetSizer(box)

    def initStatusBar(self):
        self.statusBar = self.CreateStatusBar()
        self.statusBar.SetFieldsCount(3)
        #print("Fields=%d" % self.statusBar.GetFieldsCount())
        self.statusBar.SetStatusWidths([-1, -2, -3])
        self.statusBar.SetStatusText('画线程序', 1)

    def menuData(self):  # 2 菜单数据
        return [("&File", (
            ("&New", "New Sketch file", self.OnNew),
            ("&Open", "Open sketch file", self.OnOpen),
            ("&Save", "Save sketch file", self.OnSave),
            ("", "", ""),
            ("&Color", (
                ("&Black", "", self.OnColor, wx.ITEM_RADIO),
                ("&Red", "", self.OnColor, wx.ITEM_RADIO),
                ("&Green", "", self.OnColor, wx.ITEM_RADIO),
                ("&Blue", "", self.OnColor, wx.ITEM_RADIO),
                ("&Other...", "", self.OnOtherColor, wx.ITEM_RADIO),
            )),
            ("", "", ""),
            ("&Quit", "Quit", self.OnCloseWindow))),
                ("&Edit", (
                    ("&Copy", "copy Sketch edit", self.OnCopy),
                    ("&Cut", "Cut Sketch edit", self.OnCut),
                    ("&About", "About Sketch edit", self.OnAbout),
                ))]

    def createMenuBar(self):
        menuBar = wx.MenuBar()
        for eachMenuData in self.menuData():
            menuLabel = eachMenuData[0]
            menuItems = eachMenuData[1]
            menuBar.Append(self.createMenu(menuItems), menuLabel)
        self.SetMenuBar(menuBar)

    def createMenu(self, menuData):
        menu = wx.Menu()
        # 3 创建子菜单
        for eachItem in menuData:
            if len(eachItem) == 2:
                label = eachItem[0]
                subMenu = self.createMenu(eachItem[1])
                menu.Append(wx.NewId(), label, subMenu)
            else:
                self.createMenuItem(menu, *eachItem)
        return menu

    def createMenuItem(self, menu, label, status, handler, kind=wx.ITEM_NORMAL):
        if not label:
            menu.AppendSeparator()
            return
        menuItem = menu.Append(-1, label, status, kind)  # 4 使用kind创建菜单项
        self.Bind(wx.EVT_MENU, handler, menuItem)

    def SaveFile(self):  # 保存文件
        if self.filename:
            data = self.sketch.GetLinesData()
            f = open(self.filename, 'wb')
            pickle.dump(data, f, 2)  # 数据序列化
            f.close()

    def ReadFile(self):
        try:
            f = open(self.filename, 'rb')
            data = pickle.load(f)  # 数字反序列化
            f.close();
            self.sketch.SetLinesData(data)
        except pickle.UnpicklingError:
            wx.MessageDialog("%s is not a sketch file" % (self.filename, "opps!"),
                             style=wx.OK | wx.ICON_EXCLAMATION)

    def OnCopy(self, event):
        pass

    def OnCut(self, event):
        pass

    def OnNew(self, event):
        pass

    def OnAbout(self, event):
        about = SketchAbout(self)
        about.ShowModal()
        about.Destroy()

    def OnOpen(self, event):
        dlg = wx.FileDialog(self, "Open sketch file...",
                            os.getcwd(),
                            style=wx.FD_OPEN,
                            wildcard=self.wildcard)
        if dlg.ShowModal() == wx.ID_OK:
            self.filename = dlg.GetPath()
            self.ReadFile()
            self.SetTitle(self.title + "--" + self.filename)
        dlg.Destroy()

    def OnSave(self, event):
        if not self.filename:
            self.OnSaveAs(event)
        else:
            self.SaveFile()

    def OnSaveAs(self, event):  # 弹出保存对话框
        dlg = wx.FileDialog(self, "Save sketh as ...",
                            os.getcwd(),
                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT,
                            wildcard=self.wildcard)
        if dlg.ShowModal() == wx.ID_OK:
            filename = dlg.GetPath()
            if not os.path.splitext(filename)[1]:
                filename = filename + '.sketch'
                self.filename = filename
                self.SaveFile()
                self.SetTitle(self.title + '--' + self.filename)
            dlg.Destroy()

    def OnColor(self, event):  # 5 处理颜色的改变
        menubar = self.GetMenuBar()
        itemId = event.GetId()
        item = menubar.FindItemById(itemId)
        if not item:
            toolbar = self.GetToolBar()
            item = toolbar.FindById(itemId)
            color = item.GetShortHelp()
        else:
            color = item.GetLabel()
        self.sketch.SetColor(color)

    def OnOtherColor(self, event):
        data = wx.ColourData()
        data.SetChooseFull(True)
        for i in range(16):
            colour = wx.Colour(i * 16, i * 16, i * 16)
            data.SetCustomColour(i, colour)

        dialog = wx.ColourDialog(self, data)
        if dialog.ShowModal() == wx.ID_OK:
            retData = dialog.GetColourData()
            self.sketch.SetColor(retData.GetColour())

    def OnCloseWindow(self, event):
        self.Destroy()

    def OnSketchMotion(self, event):
        self.statusBar.SetStatusText("pos:%s" % (str(event.GetPosition())), 0)
        self.statusBar.SetStatusText("Current  Pts: %s" % (len(self.sketch.curLine)), 1)
        self.statusBar.SetStatusText("Line Count:   %s" % (len(self.sketch.lines)), 2)
        event.Skip()


class SketchApp(wx.App):
    def OnInit(self):
        bmp = wx.Image("splash.png").ConvertToBitmap()
        adv.SplashScreen(bmp, adv.SPLASH_CENTER_ON_SCREEN | adv.SPLASH_TIMEOUT, 1000, None, -1)
        wx.Yield()
        frame = SketchFrame(None)
        frame.Show()
        self.SetTopWindow(frame)
        return True

if __name__ == '__main__':
    app = wx.App()
    #SketchApp()
    bmp = wx.Image("splash.png").ConvertToBitmap()
    adv.SplashScreen(bmp, adv.SPLASH_CENTER_ON_SCREEN | adv.SPLASH_TIMEOUT, 1000, None, id=-1,size=(800,600))
    wx.Yield()
    frm = SketchFrame(None)
    frm.Show()
    app.MainLoop()
  
#画圆弧  DrawArc(x1, y1, x2, y2,xc, yc)
#画圆    DrawCircle(x,y.radius)或 DrawCircle(point,radius)
#画矩形  DrawRectangle(x,y,width,height)  左上角是(x,y),其宽和高是width和 height
#画椭圆 DrawEllipse
画图标: DrawIcon(icon,x,y)
#画线: DrawLine(x1,y1,x2,y2)
#画连接线 DrawLines()该方法以wx.Point对象的一个Python列表为参数,并将其中的点连接起来
#画多边形 DrawPolygon(points) 按给定的wx.Point对象的一个Python列表回执一个多边形 
#画字符串DrawText(text,x,y) 从(x,y)开始绘制给定的字符串,使用当前的字体。相关的函数包括D让我RotateDText()和GetTextExtent().

#区域填充 FloodFill(x, y, color,style):从点(x, y)执行一个区域填充,使用当前画刷的颜色。参数style是可选的。style的默认值是wx.FLOOD_SURFACE,它表示当填充碰到另一颜色时停止。另一值wx.FLOOD_BORDER表示参数color是填充的边界,当填充碰到该颜色的代表的边界时停止。

GetBackground()   SetBackground(brush)背景画刷是一个wx.Brush对象,当Clear()方法被调用时使用

GetBrush()   SetBrush(brush):画刷是一个wx.Brush对象并且用于填充任何绘制在设备上下文上的形状。

GetFont()  SetFont(font)字体(font)是一个wx.Font对象,被用于所有的文本绘制操作。

GetPen()    SetPen(pen):画笔(pen)是一个wx.Pen对象,被用于所有绘制线条的操作。

GetPixel(x, y)返回一个关于点(x, y)的像素的一个wx.Colour对象。

GetSize()

GetSizeTuple():以一个wx.Size对象或一个Python元组的形式返回设备上下文的像素尺寸。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python画图程序 的相关文章

  • 【可见光室内定位】(一)概览

    目录 一 室内无线定位技术概况二 研究现状三 应用前景背景 一 室内无线定位技术概况 二 研究现状 得益于可见光通信 xff08 xff36 xff2c xff23 xff09 技术的迅速发展 xff0c 可 见光定位 xff08 xff3
  • 【机器学习中的数学】比例混合分布

    比例混合分布 Scale Mixture Distribution 混合分布是来自其他随机变量的集合构成的随机变量的概率分布 xff1a 一个随机变量是根据给定的概率从集合随机选取的 xff0c 然后所选随机变量的值就得到了 first a
  • 互联网相似图像识别检索引擎 —— 基于图像签名的方式

    一 引言 多媒体识别是信息检索中难度较高且需求日益旺盛的一个问题 以图像为例 xff0c 按照图像检索中使用的信息区分 xff0c 图像可以分为两类 xff1a 基于文本的图像检索和基于内容识别的图像检索 xff08 CBIR xff1a
  • 【Vim】使用map自定义快捷键

    map简介 map是一个映射命令 将常用的很长的命令映射到一个新的功能键上 map是Vim强大的一个重要原因 xff0c 可以自定义各种快捷键 xff0c 用起来自然得心应手 映射的种类 有五种映射存在 xff1a 用于普通模式 输入命令时
  • 【Scala】使用Option、Some、None,避免使用null

    避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是 无 xff0c 在Java xff0c 它是null 在Java 里 xff0c null 是一个关键字 xff0c 不是一个对象 xff0c 所以对它调用任何
  • 【Linux】使用update-alternatives命令进行版本的切换

    引言 在Debian系统中 xff0c 我们可能会同时安装有很多功能类似的程序和可选配置 xff0c 可能会出现同一软件的多个版本并存的场景 比如像是一些编程语言工具 xff0c 一些系统中自带的是python2 6 xff0c 而现在py
  • stm32G0 启动

    目的 STM32G是意法半导体这两年新推出的系列芯片 xff0c 相比原先的F系列的芯片有很多提升点 xff0c 将来必将取代F系列芯片的地位 对于新芯片的应用来说能够正确下载与运行程序是比较重要的一点 xff0c 这篇文章将对 STM32
  • 【scikit-learn】交叉验证及其用于参数选择、模型选择、特征选择的例子

    xfeff xfeff 内容概要 训练集 测试集分割用于模型验证的缺点K折交叉验证是如何克服之前的不足交叉验证如何用于选择调节参数 选择模型 选择特征改善交叉验证 1 模型验证回顾 进行模型验证的一个重要目的是要选出一个最合适的模型 xff
  • 【scikit-learn】网格搜索来进行高效的参数调优

    xfeff xfeff 内容概要 如何使用K折交叉验证来搜索最优调节参数如何让搜索参数的流程更加高效如何一次性的搜索多个调节参数在进行真正的预测之前 xff0c 如何对调节参数进行处理如何削减该过程的计算代价 1 K折交叉验证回顾 交叉验证
  • 【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等

    xfeff xfeff 内容概要 模型评估的目的及一般评估流程分类准确率的用处及其限制混淆矩阵 xff08 confusion matrix xff09 是如何表示一个分类器的性能混淆矩阵中的度量是如何计算的通过改变分类阈值来调整分类器性能
  • 【Scala-ML】使用Scala构建机器学习工作流

    引言 在这一小节中 xff0c 我将介绍基于数据 xff08 函数式 xff09 的方法来构建数据应用 这里会介绍monadic设计来创建动态工作流 xff0c 利用依赖注入这样的高级函数式特性来构建轻便的计算工作流 建模过程 在统计学和概
  • 【Scala】响应式编程思想

    何为响应式编程 响应式编程是一种面向数据流和变化传播的编程范式 xff0c 数据更新是相关联的 这意味着可以在编程语言中很方便地表达静态或动态的数据流 xff0c 而相关的计算模型会自动将变化的值通过数据流进行传播 以响应式编程方式进行思考
  • 【函数式】纯函数与替代模型

    纯函数 一个函数在程序执行的过程中除了根据输入参数给出运算结果之外没有其他的副作用影响 xff0c 我们可以把这类函数称为 纯函数 纯函数由于不依赖外部变量 xff0c 使得给定函数输入其返回结果永远不变 xff0c 比如整数的加法函数 x
  • C/C++ 常用程序库

    C C 43 43 程序库 https zhuanlan zhihu com p 98056565 来几个不常见但是很变态的库吧 bundle 把几乎所有常见的压缩库封装成了一个库 接口完全统一 想用哪个用哪个 就一个h和一个巨TM大的cp
  • git 提交的时候报错:error: 'flutter_app/' does not have a commit checked out

    如果有朋友遇到这个问题 xff0c 请不用担心 xff0c 因为这个问题非常简单 xff01 出现的情况就是 xff0c 你在一个github仓库里面 xff0c 放进来一个文件夹 xff0c 但是文件夹里面还有文件夹 xff0c 而且还没
  • Fragment中使用viewLifecycleOwner/getActivity/this

    观察liveData使用生命周期 如图 xff1a 当liveData想在fragment里观察的时候 xff0c 可以使用getActivity this getViewLifecycleOwner getActivity不必说 xff0
  • Android的FileProvider使用解释

    前言 从Android7 0 xff08 N xff09 开始 xff0c 严格执行 StrictMode 模式 xff0c 也就是说 xff0c 将对安全做更严格的校验 不允许在 App 间 xff0c 使用 file 的方式 xff0c
  • STM32G0 串口编程

    利用USB转串口调试 xff0c 烧写单片机程序 1 打开STM32 CubeProgrammer软件设置启动配置 2 让程序从system Flash启动 xff08 1 xff09 勾选 DTR 勾选RTS 取消勾选RTS 2 取消勾选
  • Android使用SystemProperties基础了解

    安卓系统属性是以键值对的形式存在 xff0c 一般放在system prop xff0c build prop xff0c default prop等文件中 这些属性可能是进程状态 xff0c 资源使用情况 xff0c 系统特有属性等等 创
  • 使用Android Studio打包Module成jar包

    现在假设我们想打包一个module成jar包的形式给其它应用调用 xff1a vrservice 1 0 jar 步骤1 在Module项目的build gradle文件中做如下配置 xff1a 生成jar包的配置如下 xff1a def

随机推荐

  • C++无符号整型与有符号整型变量的运算-不简单

    示例分析 xff1a include lt iostream gt include lt stdio h gt struct Result char c char d unsigned char e Result getChar int x
  • C++虚继承下的类大小

    前言 带有虚函数的虚继承的对象模型比较复杂 xff0c 所以单独整理一下 其实关于计算类大小是C 43 43 的一大易错点之一 即便是我在这儿理了半天 xff0c 也不一定就是正确的 xff0c 如果大佬看到本文 xff0c 发现我很多错误
  • 解决android的跑马灯频繁刷新的问题

    先贴一下跑马灯效果的代码 xff0c 这里我是继承的TextView xff1a public class MarqueeTextView extends AppCompatTextView public MarqueeTextView C
  • 关于第一次将STM32与电脑连接情况

    安装了Keil xff08 ARM xff09 版本之后 xff0c 不管是自己编程 xff0c 还是配套的程序运行 我们都想把它下载到STM32芯片里面 xff0c 在板子上运行 这里介绍几种方法 1 用J LINK下载调试 这个工具 x
  • [java语言]——InetAddress类的getByName()方法

    InetAddress 表示互联网协议 xff08 IP xff09 地址 InetAddress getByName 34 www 163 com 34 在给定主机名的情况下确定主机的IP地址 如果参数为null 获得的是本机的IP地址
  • Java中Calendar.DAY_OF_WEEK、DAY_OF_MONTH需要减一的原因

    Java中对日期的处理需要用到Calendar类 xff0c 其中有几个方法在使用时需要新手注意 1 在获取月份时 xff0c Calendar MONTH 43 1 的原因 xff08 Java中Calendar MONTH返回的数值其实
  • C语言学习笔记(三)(头文件的结构顺序)(类型不完整的解决方法)

    目录 前言原则结构推荐结构图方便的结构 类型不完整的原因和解决方法 xff1a 定义了不定长数组结构体的定义放在了头文件里面解决方法1 xff08 当采用使用时包含特定头文件时 xff09 xff1a 解决方法2 xff08 当一个头文件包
  • S2

    int count 61 0 double lat 61 55 8241 double lng 61 137 8347 double radius 61 900 半径 double capHeight 61 2 S2 M PI radius
  • 从STM32F407到AT32F407(一)

    雅特力公司的MCU有着性能超群 xff0c 价格优越的巨大优势 xff0c 缺点是相关资料少一些 xff0c 我们可以充分利用ST的现有资源来开发它 我用雅特力的STM32F437开发板 xff0c 使用原子 stm32f407的开发板自带
  • vue-java分离

    import com google gson Gson import io renren common utils HttpContextUtils import io renren common utils R import org ap
  • java学习

    莫求全 有效努力 定时出结果 架构设计DDD 微服务介绍 https www kancloud cn qingshou aaa1 2667225 https www cnblogs com chencan p 16042197 html h
  • CentOS6.5添加虚拟IP(VIP)

    使用keepalived 实现Nginx高可用时 需要用到这项技术 虚拟ip在高可用中的作用后续再说 今天看看怎么给服务器配置虚拟IP xff0c 其实也就是多分配个IP地址 首先查看一下现有网卡的IP地址 xff0c 用root特权运行下
  • 微服务Spring Cloud例子

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具 xff0c 为开发者提供了在分布式系统 xff08 配置管理 xff0c 服务发现 xff0c 熔断 xff0c 路由 xff0c
  • 美邦威集成呼吸墙饰

    http www mbwqs cn 湖北光大新型环保装饰材料有限公司 美邦威集成呼吸墙饰 生产销售中心 xff1a 湖北汉川经济开发区光大工业园 光大材料 210590 上海股交所挂牌
  • activemq--MASTER SLAVE+BROKER CLUSTER 实践(二)

    鱼与熊掌兼得法 完美解决方案 我们知道 xff1a master slave模式下 xff0c 消息会被逐个复制而cluster模式下 xff0c 请求会被自动派发 那么可不可以把两者集成起来呢 xff1f 答案是有的 xff0c 网上所谓
  • Dubbo超时和重连机制

    dubbo启动时默认有重试机制和超时机制 超时机制的规则是如果在一定的时间内 xff0c provider没有返回 xff0c 则认为本次调用失败 xff0c 重试机制在出现调用失败时 xff0c 会再次调用 如果在配置的调用次数内都失败
  • Sharding-JDBC简介

    一般 xff0c 线上系统的业务量不是很大 xff0c 比如说单库的数据量在百万级别以下 xff0c 那么MySQL的单库即可完成任何增 删 改 查的业务操作 随着业务的发展 xff0c 单个DB中保存的数据量 xff08 用户 订单 计费
  • 1024

    听说今天发帖能有1024勋章 xff1f
  • 神奇!明明是 socket,被我玩成了 http!

    颓废青年 xff0c 快出来挨打 xff01 点击上方 Java极客技术 xff0c 选择 设为星标 后台回复 java xff0c 获取Java知识体系 面试必看资料 资料会持续更新 xff0c 已更新第四次 xff01 文章精品专栏 记
  • python画图程序

    usr bin python coding utf 8 import wx import wx lib buttons as buttons import wx adv as adv import wx lib colourselect a