ttkbootstrap界面美化系列之Meter(六)

        Meter是计量表控件,在大数据统计类的界面设计中使用较多,本文将介绍ttk中的Meter控件

一:Meter接口

print(help(ttk.Meter))
Help on class Meter in module ttkbootstrap.widgets:

class Meter(tkinter.ttk.Frame)
 |  Meter(master=None, bootstyle='default', arcrange=None, arcoffset=None, amounttotal=100, amountused=0, wedgesize=0, metersize=200, metertype='full', meterthickness=10, showtext=True, interactive=False, stripethickness=0, textleft=None, textright=None, textfont='-size 20 -weight bold', subtext=None, subtextstyle='default', subtextfont='-size 10', stepsize=1, **kwargs)
 |
 |  A radial meter that can be used to show progress of long
 |  running operations or the amount of work completed; can also be
 |  used as a dial when set to `interactive=True`.
 |
 |  This widget is very flexible. There are two primary meter types
 |  which can be set with the `metertype` parameter: 'full' and
 |  'semi', which shows the arc of the meter in a full or
 |  semi-circle. You can also customize the arc of the circle with
 |  the `arcrange` and `arcoffset` parameters.
 |
 |  The meter indicator can be displayed as a solid color or with
 |  stripes using the `stripethickness` parameter. By default, the
 |  `stripethickness` is 0, which results in a solid meter
 |  indicator. A higher `stripethickness` results in larger wedges
 |  around the arc of the meter.
 |
 |  Various text and label options exist. The center text and
 |  meter indicator is formatted with the `meterstyle` parameter.
 |  You can set text on the left and right of this center label
 |  using the `textleft` and `textright` parameters. This is most
 |  commonly used for '$', '%', or other such symbols.
 |
 |  If you need access to the variables that update the meter, you
 |  you can access these via the `amountusedvar`, `amounttotalvar`,
 |  and the `labelvar`. The value of these properties can also be
 |  retrieved via the `configure` method.
 |
 |  ![](../../assets/widgets/meter.gif)
 |
 |  Examples:
 |
 |      ```python
 |      import ttkbootstrap as ttk
 |      from ttkbootstrap.constants import *
 |
 |      app = ttk.Window()
 |
 |      meter = ttk.Meter(
 |          metersize=180,
 |          padding=5,
 |          amountused=25,
 |          metertype="semi",
 |          subtext="miles per hour",
 |          interactive=True,
 |      )
 |      meter.pack()
 |
 |      # update the amount used directly
 |      meter.configure(amountused = 50)
 |
 |      # update the amount used with another widget
 |      entry = ttk.Entry(textvariable=meter.amountusedvar)
 |      entry.pack(fill=X)
 |
 |      # increment the amount by 10 steps
 |      meter.step(10)
 |
 |      # decrement the amount by 15 steps
 |      meter.step(-15)
 |
 |      # update the subtext
 |      meter.configure(subtext="loading...")
 |
 |      app.mainloop()
 |      ```
 |
 |  Method resolution order:
 |      Meter
 |      tkinter.ttk.Frame
 |      tkinter.ttk.Widget
 |      tkinter.Widget
 |      tkinter.BaseWidget
 |      tkinter.Misc
 |      tkinter.Pack
 |      tkinter.Place
 |      tkinter.Grid
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  __getitem__(self, key: str)
 |      Return the resource value for a KEY given as string.
 |
 |  __init__(self, master=None, bootstyle='default', arcrange=None, arcoffset=None, amounttotal=100, amountused=0, wedgesize=0, metersize=200, metertype='full', meterthickness=10, showtext=True, interactive=False, stripethickness=0, textleft=None, textright=None, textfont='-size 20 -weight bold', subtext=None, subtextstyle='default', subtextfont='-size 10', stepsize=1, **kwargs)
 |      Parameters:
 |
 |          master (Widget):
 |              The parent widget.
 |
 |          arcrange (int):
 |              The range of the arc if degrees from start to end.
 |
 |          arcoffset (int):
 |              The amount to offset the arc's starting position in degrees.
 |              0 is at 3 o'clock.
 |
 |          amounttotal (int):
 |              The maximum value of the meter.
 |
 |          amountused (int):
 |              The current value of the meter; displayed in a center label
 |              if the `showtext` property is set to True.
 |
 |          wedgesize (int):
 |              Sets the length of the indicator wedge around the arc. If
 |              greater than 0, this wedge is set as an indicator centered
 |              on the current meter value.
 |
 |          metersize (int):
 |              The meter is square. This represents the size of one side
 |              if the square as measured in screen units.
 |
 |          bootstyle (str):
 |              Sets the indicator and center text color. One of primary,
 |              secondary, success, info, warning, danger, light, dark.
 |
 |          metertype ('full', 'semi'):
 |              Displays the meter as a full circle or semi-circle.
 |
 |          meterthickness (int):
 |              The thickness of the indicator.
 |
 |          showtext (bool):
 |              Indicates whether to show the left, center, and right text
 |              labels on the meter.
 |
 |          interactive (bool):
 |              Indicates that the user may adjust the meter value with
 |              mouse interaction.
 |
 |          stripethickness (int):
 |              The indicator can be displayed as a solid band or as
 |              striped wedges around the arc. If the value is greater than
 |              0, the indicator changes from a solid to striped, where the
 |              value is the thickness of the stripes (or wedges).
 |
 |          textleft (str):
 |              A short string inserted to the left of the center text.
 |
 |          textright (str):
 |              A short string inserted to the right of the center text.
 |
 |          textfont (Union[str, Font]):
 |              The font used to render the center text.
 |
 |          subtext (str):
 |              Supplemental text that appears below the center text.
 |
 |          subtextstyle (str):
 |              The bootstyle color of the subtext. One of primary,
 |              secondary, success, info, warning, danger, light, dark.
 |              The default color is Theme specific and is a lighter
 |              shade based on whether it is a 'light' or 'dark' theme.
 |
 |          subtextfont (Union[str, Font]):
 |              The font used to render the subtext.
 |
 |          stepsize (int):
 |              Sets the amount by which to change the meter indicator
 |              when incremented by mouse interaction.
 |
 |          **kwargs:
 |              Other keyword arguments that are passed directly to the
 |              `Frame` widget that contains the meter components.
 |
 |  __setitem__(self, key: str, value) -> None
 |
 |  configure(self, cnf=None, **kwargs)
 |      Configure the options for this widget.
 |
 |      Parameters:
 |          cnf (Dict[str, Any], optional):
 |              A dictionary of configuration options.
 |
 |          **kwargs: Optional keyword arguments.
 |
 |  step(self, delta=1)
 |      Increase the indicator value by `delta`
 |
 |      The indicator will reverse direction and count down once it
 |      reaches the maximum value.
 |
 |      Parameters:
 |
 |          delta (int):
 |              The amount to change the indicator.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.ttk.Frame:
 |
 |  config = configure(self, cnf=None, **kwargs)
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.ttk.Widget:
 |
 |  identify(self, x, y)
 |      Returns the name of the element at position x, y, or the empty
 |      string if the point does not lie within any element.
 |
 |      x and y are pixel coordinates relative to the widget.
 |
 |  instate(self, statespec, callback=None, *args, **kw)
 |      Test the widget's state.
 |
 |      If callback is not specified, returns True if the widget state
 |      matches statespec and False otherwise. If callback is specified,
 |      then it will be invoked with *args, **kw if the widget state
 |      matches statespec. statespec is expected to be a sequence.
 |
 |  state(self, statespec=None)
 |      Modify or inquire widget state.
 |
 |      Widget state is returned if statespec is None, otherwise it is
 |      set according to the statespec flags and then a new state spec
 |      is returned indicating which flags were changed. statespec is
 |      expected to be a sequence.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.BaseWidget:
 |
 |  destroy(self)
 |      Destroy this and all descendants widgets.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.Misc:
 |
 |  __repr__(self)
 |      Return repr(self).
 |
 |  __str__(self)
 |      Return the window path name of this widget.
 |
 |  after(self, ms, func=None, *args)
 |      Call function once after given time.
 |
 |      MS specifies the time in milliseconds. FUNC gives the
 |      function which shall be called. Additional parameters
 |      are given as parameters to the function call.  Return
 |      identifier to cancel scheduling with after_cancel.
 |
 |  after_cancel(self, id)
 |      Cancel scheduling of function identified with ID.
 |
 |      Identifier returned by after or after_idle must be
 |      given as first parameter.
 |
 |  after_idle(self, func, *args)
 |      Call FUNC once if the Tcl main loop has no event to
 |      process.
 |
 |      Return an identifier to cancel the scheduling with
 |      after_cancel.
 |
 |  anchor = grid_anchor(self, anchor=None)
 |
 |  bbox = grid_bbox(self, column=None, row=None, col2=None, row2=None)
 |
 |  bell(self, displayof=0)
 |      Ring a display's bell.
 |
 |  bind(self, sequence=None, func=None, add=None)
 |      Bind to this widget at event SEQUENCE a call to function FUNC.
 |
 |      SEQUENCE is a string of concatenated event
 |      patterns. An event pattern is of the form
 |      <MODIFIER-MODIFIER-TYPE-DETAIL> where MODIFIER is one
 |      of Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4,
 |      Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,
 |      B3, Alt, Button4, B4, Double, Button5, B5 Triple,
 |      Mod1, M1. TYPE is one of Activate, Enter, Map,
 |      ButtonPress, Button, Expose, Motion, ButtonRelease
 |      FocusIn, MouseWheel, Circulate, FocusOut, Property,
 |      Colormap, Gravity Reparent, Configure, KeyPress, Key,
 |      Unmap, Deactivate, KeyRelease Visibility, Destroy,
 |      Leave and DETAIL is the button number for ButtonPress,
 |      ButtonRelease and DETAIL is the Keysym for KeyPress and
 |      KeyRelease. Examples are
 |      <Control-Button-1> for pressing Control and mouse button 1 or
 |      <Alt-A> for pressing A and the Alt key (KeyPress can be omitted).
 |      An event pattern can also be a virtual event of the form
 |      <<AString>> where AString can be arbitrary. This
 |      event can be generated by event_generate.
 |      If events are concatenated they must appear shortly
 |      after each other.
 |
 |      FUNC will be called if the event sequence occurs with an
 |      instance of Event as argument. If the return value of FUNC is
 |      "break" no further bound function is invoked.
 |
 |      An additional boolean parameter ADD specifies whether FUNC will
 |      be called additionally to the other bound function or whether
 |      it will replace the previous function.
 |
 |      Bind will return an identifier to allow deletion of the bound function with
 |      unbind without memory leak.
 |
 |      If FUNC or SEQUENCE is omitted the bound function or list
 |      of bound events are returned.
 |
 |  bind_all(self, sequence=None, func=None, add=None)
 |      Bind to all widgets at an event SEQUENCE a call to function FUNC.
 |      An additional boolean parameter ADD specifies whether FUNC will
 |      be called additionally to the other bound function or whether
 |      it will replace the previous function. See bind for the return value.
 |
 |  bind_class(self, className, sequence=None, func=None, add=None)
 |      Bind to widgets with bindtag CLASSNAME at event
 |      SEQUENCE a call of function FUNC. An additional
 |      boolean parameter ADD specifies whether FUNC will be
 |      called additionally to the other bound function or
 |      whether it will replace the previous function. See bind for
 |      the return value.
 |
 |  bindtags(self, tagList=None)
 |      Set or get the list of bindtags for this widget.
 |
 |      With no argument return the list of all bindtags associated with
 |      this widget. With a list of strings as argument the bindtags are
 |      set to this list. The bindtags determine in which order events are
 |      processed (see bind).
 |
 |  cget(self, key)
 |      Return the resource value for a KEY given as string.
 |
 |  clipboard_append(self, string, **kw)
 |      Append STRING to the Tk clipboard.
 |
 |      A widget specified at the optional displayof keyword
 |      argument specifies the target display. The clipboard
 |      can be retrieved with selection_get.
 |
 |  clipboard_clear(self, **kw)
 |      Clear the data in the Tk clipboard.
 |
 |      A widget specified for the optional displayof keyword
 |      argument specifies the target display.
 |
 |  clipboard_get(self, **kw)
 |      Retrieve data from the clipboard on window's display.
 |
 |      The window keyword defaults to the root window of the Tkinter
 |      application.
 |
 |      The type keyword specifies the form in which the data is
 |      to be returned and should be an atom name such as STRING
 |      or FILE_NAME.  Type defaults to STRING, except on X11, where the default
 |      is to try UTF8_STRING and fall back to STRING.
 |
 |      This command is equivalent to:
 |
 |      selection_get(CLIPBOARD)
 |
 |  columnconfigure = grid_columnconfigure(self, index, cnf={}, **kw)
 |
 |  deletecommand(self, name)
 |      Internal function.
 |
 |      Delete the Tcl command provided in NAME.
 |
 |  event_add(self, virtual, *sequences)
 |      Bind a virtual event VIRTUAL (of the form <<Name>>)
 |      to an event SEQUENCE such that the virtual event is triggered
 |      whenever SEQUENCE occurs.
 |
 |  event_delete(self, virtual, *sequences)
 |      Unbind a virtual event VIRTUAL from SEQUENCE.
 |
 |  event_generate(self, sequence, **kw)
 |      Generate an event SEQUENCE. Additional
 |      keyword arguments specify parameter of the event
 |      (e.g. x, y, rootx, rooty).
 |
 |  event_info(self, virtual=None)
 |      Return a list of all virtual events or the information
 |      about the SEQUENCE bound to the virtual event VIRTUAL.
 |
 |  focus = focus_set(self)
 |
 |  focus_displayof(self)
 |      Return the widget which has currently the focus on the
 |      display where this widget is located.
 |
 |      Return None if the application does not have the focus.
 |
 |  focus_force(self)
 |      Direct input focus to this widget even if the
 |      application does not have the focus. Use with
 |      caution!
 |
 |  focus_get(self)
 |      Return the widget which has currently the focus in the
 |      application.
 |
 |      Use focus_displayof to allow working with several
 |      displays. Return None if application does not have
 |      the focus.
 |
 |  focus_lastfor(self)
 |      Return the widget which would have the focus if top level
 |      for this widget gets the focus from the window manager.
 |
 |  focus_set(self)
 |      Direct input focus to this widget.
 |
 |      If the application currently does not have the focus
 |      this widget will get the focus if the application gets
 |      the focus through the window manager.
 |
 |  getboolean(self, s)
 |      Return a boolean value for Tcl boolean values true and false given as parameter.
 |
 |  getdouble(self, s)
 |
 |  getint(self, s)
 |
 |  getvar(self, name='PY_VAR')
 |      Return value of Tcl variable NAME.
 |
 |  grab_current(self)
 |      Return widget which has currently the grab in this application
 |      or None.
 |
 |  grab_release(self)
 |      Release grab for this widget if currently set.
 |
 |  grab_set(self)
 |      Set grab for this widget.
 |
 |      A grab directs all events to this and descendant
 |      widgets in the application.
 |
 |  grab_set_global(self)
 |      Set global grab for this widget.
 |
 |      A global grab directs all events to this and
 |      descendant widgets on the display. Use with caution -
 |      other applications do not get events anymore.
 |
 |  grab_status(self)
 |      Return None, "local" or "global" if this widget has
 |      no, a local or a global grab.
 |
 |  grid_anchor(self, anchor=None)
 |      The anchor value controls how to place the grid within the
 |      master when no row/column has any weight.
 |
 |      The default anchor is nw.
 |
 |  grid_bbox(self, column=None, row=None, col2=None, row2=None)
 |      Return a tuple of integer coordinates for the bounding
 |      box of this widget controlled by the geometry manager grid.
 |
 |      If COLUMN, ROW is given the bounding box applies from
 |      the cell with row and column 0 to the specified
 |      cell. If COL2 and ROW2 are given the bounding box
 |      starts at that cell.
 |
 |      The returned integers specify the offset of the upper left
 |      corner in the master widget and the width and height.
 |
 |  grid_columnconfigure(self, index, cnf={}, **kw)
 |      Configure column INDEX of a grid.
 |
 |      Valid resources are minsize (minimum size of the column),
 |      weight (how much does additional space propagate to this column)
 |      and pad (how much space to let additionally).
 |
 |  grid_location(self, x, y)
 |      Return a tuple of column and row which identify the cell
 |      at which the pixel at position X and Y inside the master
 |      widget is located.
 |
 |  grid_propagate(self, flag=['_noarg_'])
 |      Set or get the status for propagation of geometry information.
 |
 |      A boolean argument specifies whether the geometry information
 |      of the slaves will determine the size of this widget. If no argument
 |      is given, the current setting will be returned.
 |
 |  grid_rowconfigure(self, index, cnf={}, **kw)
 |      Configure row INDEX of a grid.
 |
 |      Valid resources are minsize (minimum size of the row),
 |      weight (how much does additional space propagate to this row)
 |      and pad (how much space to let additionally).
 |
 |  grid_size(self)
 |      Return a tuple of the number of column and rows in the grid.
 |
 |  grid_slaves(self, row=None, column=None)
 |      Return a list of all slaves of this widget
 |      in its packing order.
 |
 |  image_names(self)
 |      Return a list of all existing image names.
 |
 |  image_types(self)
 |      Return a list of all available image types (e.g. photo bitmap).
 |
 |  info_patchlevel(self)
 |      Returns the exact version of the Tcl library.
 |
 |  keys(self)
 |      Return a list of all resource names of this widget.
 |
 |  lift = tkraise(self, aboveThis=None)
 |
 |  lower(self, belowThis=None)
 |      Lower this widget in the stacking order.
 |
 |  mainloop(self, n=0)
 |      Call the mainloop of Tk.
 |
 |  nametowidget(self, name)
 |      Return the Tkinter instance of a widget identified by
 |      its Tcl name NAME.
 |
 |  option_add(self, pattern, value, priority=None)
 |      Set a VALUE (second parameter) for an option
 |      PATTERN (first parameter).
 |
 |      An optional third parameter gives the numeric priority
 |      (defaults to 80).
 |
 |  option_clear(self)
 |      Clear the option database.
 |
 |      It will be reloaded if option_add is called.
 |
 |  option_get(self, name, className)
 |      Return the value for an option NAME for this widget
 |      with CLASSNAME.
 |
 |      Values with higher priority override lower values.
 |
 |  option_readfile(self, fileName, priority=None)
 |      Read file FILENAME into the option database.
 |
 |      An optional second parameter gives the numeric
 |      priority.
 |
 |  pack_propagate(self, flag=['_noarg_'])
 |      Set or get the status for propagation of geometry information.
 |
 |      A boolean argument specifies whether the geometry information
 |      of the slaves will determine the size of this widget. If no argument
 |      is given the current setting will be returned.
 |
 |  pack_slaves(self)
 |      Return a list of all slaves of this widget
 |      in its packing order.
 |
 |  place_slaves(self)
 |      Return a list of all slaves of this widget
 |      in its packing order.
 |
 |  propagate = pack_propagate(self, flag=['_noarg_'])
 |
 |  quit(self)
 |      Quit the Tcl interpreter. All widgets will be destroyed.
 |
 |  register = _register(self, func, subst=None, needcleanup=1)
 |
 |  rowconfigure = grid_rowconfigure(self, index, cnf={}, **kw)
 |
 |  selection_clear(self, **kw)
 |      Clear the current X selection.
 |
 |  selection_get(self, **kw)
 |      Return the contents of the current X selection.
 |
 |      A keyword parameter selection specifies the name of
 |      the selection and defaults to PRIMARY.  A keyword
 |      parameter displayof specifies a widget on the display
 |      to use. A keyword parameter type specifies the form of data to be
 |      fetched, defaulting to STRING except on X11, where UTF8_STRING is tried
 |      before STRING.
 |
 |  selection_handle(self, command, **kw)
 |      Specify a function COMMAND to call if the X
 |      selection owned by this widget is queried by another
 |      application.
 |
 |      This function must return the contents of the
 |      selection. The function will be called with the
 |      arguments OFFSET and LENGTH which allows the chunking
 |      of very long selections. The following keyword
 |      parameters can be provided:
 |      selection - name of the selection (default PRIMARY),
 |      type - type of the selection (e.g. STRING, FILE_NAME).
 |
 |  selection_own(self, **kw)
 |      Become owner of X selection.
 |
 |      A keyword parameter selection specifies the name of
 |      the selection (default PRIMARY).
 |
 |  selection_own_get(self, **kw)
 |      Return owner of X selection.
 |
 |      The following keyword parameter can
 |      be provided:
 |      selection - name of the selection (default PRIMARY),
 |      type - type of the selection (e.g. STRING, FILE_NAME).
 |
 |  send(self, interp, cmd, *args)
 |      Send Tcl command CMD to different interpreter INTERP to be executed.
 |
 |  setvar(self, name='PY_VAR', value='1')
 |      Set Tcl variable NAME to VALUE.
 |
 |  size = grid_size(self)
 |
 |  slaves = pack_slaves(self)
 |
 |  tk_bisque(self)
 |      Change the color scheme to light brown as used in Tk 3.6 and before.
 |
 |  tk_focusFollowsMouse(self)
 |      The widget under mouse will get automatically focus. Can not
 |      be disabled easily.
 |
 |  tk_focusNext(self)
 |      Return the next widget in the focus order which follows
 |      widget which has currently the focus.
 |
 |      The focus order first goes to the next child, then to
 |      the children of the child recursively and then to the
 |      next sibling which is higher in the stacking order.  A
 |      widget is omitted if it has the takefocus resource set
 |      to 0.
 |
 |  tk_focusPrev(self)
 |      Return previous widget in the focus order. See tk_focusNext for details.
 |
 |  tk_setPalette(self, *args, **kw)
 |      Set a new color scheme for all widget elements.
 |
 |      A single color as argument will cause that all colors of Tk
 |      widget elements are derived from this.
 |      Alternatively several keyword parameters and its associated
 |      colors can be given. The following keywords are valid:
 |      activeBackground, foreground, selectColor,
 |      activeForeground, highlightBackground, selectBackground,
 |      background, highlightColor, selectForeground,
 |      disabledForeground, insertBackground, troughColor.
 |
 |  tk_strictMotif(self, boolean=None)
 |      Set Tcl internal variable, whether the look and feel
 |      should adhere to Motif.
 |
 |      A parameter of 1 means adhere to Motif (e.g. no color
 |      change if mouse passes over slider).
 |      Returns the set value.
 |
 |  tkraise(self, aboveThis=None)
 |      Raise this widget in the stacking order.
 |
 |  unbind(self, sequence, funcid=None)
 |      Unbind for this widget the event SEQUENCE.
 |
 |      If FUNCID is given, only unbind the function identified with FUNCID
 |      and also delete the corresponding Tcl command.
 |
 |      Otherwise destroy the current binding for SEQUENCE, leaving SEQUENCE
 |      unbound.
 |
 |  unbind_all(self, sequence)
 |      Unbind for all widgets for event SEQUENCE all functions.
 |
 |  unbind_class(self, className, sequence)
 |      Unbind for all widgets with bindtag CLASSNAME for event SEQUENCE
 |      all functions.
 |
 |  update(self)
 |      Enter event loop until all pending events have been processed by Tcl.
 |
 |  update_idletasks(self)
 |      Enter event loop until all idle callbacks have been called. This
 |      will update the display of windows but not process events caused by
 |      the user.
 |
 |  wait_variable(self, name='PY_VAR')
 |      Wait until the variable is modified.
 |
 |      A parameter of type IntVar, StringVar, DoubleVar or
 |      BooleanVar must be given.
 |
 |  wait_visibility(self, window=None)
 |      Wait until the visibility of a WIDGET changes
 |      (e.g. it appears).
 |
 |      If no parameter is given self is used.
 |
 |  wait_window(self, window=None)
 |      Wait until a WIDGET is destroyed.
 |
 |      If no parameter is given self is used.
 |
 |  waitvar = wait_variable(self, name='PY_VAR')
 |
 |  winfo_atom(self, name, displayof=0)
 |      Return integer which represents atom NAME.
 |
 |  winfo_atomname(self, id, displayof=0)
 |      Return name of atom with identifier ID.
 |
 |  winfo_cells(self)
 |      Return number of cells in the colormap for this widget.
 |
 |  winfo_children(self)
 |      Return a list of all widgets which are children of this widget.
 |
 |  winfo_class(self)
 |      Return window class name of this widget.
 |
 |  winfo_colormapfull(self)
 |      Return True if at the last color request the colormap was full.
 |
 |  winfo_containing(self, rootX, rootY, displayof=0)
 |      Return the widget which is at the root coordinates ROOTX, ROOTY.
 |
 |  winfo_depth(self)
 |      Return the number of bits per pixel.
 |
 |  winfo_exists(self)
 |      Return true if this widget exists.
 |
 |  winfo_fpixels(self, number)
 |      Return the number of pixels for the given distance NUMBER
 |      (e.g. "3c") as float.
 |
 |  winfo_geometry(self)
 |      Return geometry string for this widget in the form "widthxheight+X+Y".
 |
 |  winfo_height(self)
 |      Return height of this widget.
 |
 |  winfo_id(self)
 |      Return identifier ID for this widget.
 |
 |  winfo_interps(self, displayof=0)
 |      Return the name of all Tcl interpreters for this display.
 |
 |  winfo_ismapped(self)
 |      Return true if this widget is mapped.
 |
 |  winfo_manager(self)
 |      Return the window manager name for this widget.
 |
 |  winfo_name(self)
 |      Return the name of this widget.
 |
 |  winfo_parent(self)
 |      Return the name of the parent of this widget.
 |
 |  winfo_pathname(self, id, displayof=0)
 |      Return the pathname of the widget given by ID.
 |
 |  winfo_pixels(self, number)
 |      Rounded integer value of winfo_fpixels.
 |
 |  winfo_pointerx(self)
 |      Return the x coordinate of the pointer on the root window.
 |
 |  winfo_pointerxy(self)
 |      Return a tuple of x and y coordinates of the pointer on the root window.
 |
 |  winfo_pointery(self)
 |      Return the y coordinate of the pointer on the root window.
 |
 |  winfo_reqheight(self)
 |      Return requested height of this widget.
 |
 |  winfo_reqwidth(self)
 |      Return requested width of this widget.
 |
 |  winfo_rgb(self, color)
 |      Return a tuple of integer RGB values in range(65536) for color in this widget.
 |
 |  winfo_rootx(self)
 |      Return x coordinate of upper left corner of this widget on the
 |      root window.
 |
 |  winfo_rooty(self)
 |      Return y coordinate of upper left corner of this widget on the
 |      root window.
 |
 |  winfo_screen(self)
 |      Return the screen name of this widget.
 |
 |  winfo_screencells(self)
 |      Return the number of the cells in the colormap of the screen
 |      of this widget.
 |
 |  winfo_screendepth(self)
 |      Return the number of bits per pixel of the root window of the
 |      screen of this widget.
 |
 |  winfo_screenheight(self)
 |      Return the number of pixels of the height of the screen of this widget
 |      in pixel.
 |
 |  winfo_screenmmheight(self)
 |      Return the number of pixels of the height of the screen of
 |      this widget in mm.
 |
 |  winfo_screenmmwidth(self)
 |      Return the number of pixels of the width of the screen of
 |      this widget in mm.
 |
 |  winfo_screenvisual(self)
 |      Return one of the strings directcolor, grayscale, pseudocolor,
 |      staticcolor, staticgray, or truecolor for the default
 |      colormodel of this screen.
 |
 |  winfo_screenwidth(self)
 |      Return the number of pixels of the width of the screen of
 |      this widget in pixel.
 |
 |  winfo_server(self)
 |      Return information of the X-Server of the screen of this widget in
 |      the form "XmajorRminor vendor vendorVersion".
 |
 |  winfo_toplevel(self)
 |      Return the toplevel widget of this widget.
 |
 |  winfo_viewable(self)
 |      Return true if the widget and all its higher ancestors are mapped.
 |
 |  winfo_visual(self)
 |      Return one of the strings directcolor, grayscale, pseudocolor,
 |      staticcolor, staticgray, or truecolor for the
 |      colormodel of this widget.
 |
 |  winfo_visualid(self)
 |      Return the X identifier for the visual for this widget.
 |
 |  winfo_visualsavailable(self, includeids=False)
 |      Return a list of all visuals available for the screen
 |      of this widget.
 |
 |      Each item in the list consists of a visual name (see winfo_visual), a
 |      depth and if includeids is true is given also the X identifier.
 |
 |  winfo_vrootheight(self)
 |      Return the height of the virtual root window associated with this
 |      widget in pixels. If there is no virtual root window return the
 |      height of the screen.
 |
 |  winfo_vrootwidth(self)
 |      Return the width of the virtual root window associated with this
 |      widget in pixel. If there is no virtual root window return the
 |      width of the screen.
 |
 |  winfo_vrootx(self)
 |      Return the x offset of the virtual root relative to the root
 |      window of the screen of this widget.
 |
 |  winfo_vrooty(self)
 |      Return the y offset of the virtual root relative to the root
 |      window of the screen of this widget.
 |
 |  winfo_width(self)
 |      Return the width of this widget.
 |
 |  winfo_x(self)
 |      Return the x coordinate of the upper left corner of this widget
 |      in the parent.
 |
 |  winfo_y(self)
 |      Return the y coordinate of the upper left corner of this widget
 |      in the parent.
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from tkinter.Misc:
 |
 |  __dict__
 |      dictionary for instance variables
 |
 |  __weakref__
 |      list of weak references to the object
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.Pack:
 |
 |  forget = pack_forget(self)
 |
 |  info = pack_info(self)
 |
 |  pack = pack_configure(self, cnf={}, **kw)
 |
 |  pack_configure(self, cnf={}, **kw)
 |      Pack a widget in the parent widget. Use as options:
 |      after=widget - pack it after you have packed widget
 |      anchor=NSEW (or subset) - position widget according to
 |                                given direction
 |      before=widget - pack it before you will pack widget
 |      expand=bool - expand widget if parent size grows
 |      fill=NONE or X or Y or BOTH - fill widget if widget grows
 |      in=master - use master to contain this widget
 |      in_=master - see 'in' option description
 |      ipadx=amount - add internal padding in x direction
 |      ipady=amount - add internal padding in y direction
 |      padx=amount - add padding in x direction
 |      pady=amount - add padding in y direction
 |      side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.
 |
 |  pack_forget(self)
 |      Unmap this widget and do not use it for the packing order.
 |
 |  pack_info(self)
 |      Return information about the packing options
 |      for this widget.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.Place:
 |
 |  place = place_configure(self, cnf={}, **kw)
 |
 |  place_configure(self, cnf={}, **kw)
 |      Place a widget in the parent widget. Use as options:
 |      in=master - master relative to which the widget is placed
 |      in_=master - see 'in' option description
 |      x=amount - locate anchor of this widget at position x of master
 |      y=amount - locate anchor of this widget at position y of master
 |      relx=amount - locate anchor of this widget between 0.0 and 1.0
 |                    relative to width of master (1.0 is right edge)
 |      rely=amount - locate anchor of this widget between 0.0 and 1.0
 |                    relative to height of master (1.0 is bottom edge)
 |      anchor=NSEW (or subset) - position anchor according to given direction
 |      width=amount - width of this widget in pixel
 |      height=amount - height of this widget in pixel
 |      relwidth=amount - width of this widget between 0.0 and 1.0
 |                        relative to width of master (1.0 is the same width
 |                        as the master)
 |      relheight=amount - height of this widget between 0.0 and 1.0
 |                         relative to height of master (1.0 is the same
 |                         height as the master)
 |      bordermode="inside" or "outside" - whether to take border width of
 |                                         master widget into account
 |
 |  place_forget(self)
 |      Unmap this widget.
 |
 |  place_info(self)
 |      Return information about the placing options
 |      for this widget.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from tkinter.Grid:
 |
 |  grid = grid_configure(self, cnf={}, **kw)
 |
 |  grid_configure(self, cnf={}, **kw)
 |      Position a widget in the parent widget in a grid. Use as options:
 |      column=number - use cell identified with given column (starting with 0)
 |      columnspan=number - this widget will span several columns
 |      in=master - use master to contain this widget
 |      in_=master - see 'in' option description
 |      ipadx=amount - add internal padding in x direction
 |      ipady=amount - add internal padding in y direction
 |      padx=amount - add padding in x direction
 |      pady=amount - add padding in y direction
 |      row=number - use cell identified with given row (starting with 0)
 |      rowspan=number - this widget will span several rows
 |      sticky=NSEW - if cell is larger on which sides will this
 |                    widget stick to the cell boundary
 |
 |  grid_forget(self)
 |      Unmap this widget.
 |
 |  grid_info(self)
 |      Return information about the options
 |      for positioning this widget in a grid.
 |
 |  grid_remove(self)
 |      Unmap this widget but remember the grid options.
 |
 |  location = grid_location(self, x, y)

None
[Finished in 588ms]

通过dir来查看Meter支持的属性和方法

['_Misc__winfo_getint', '_Misc__winfo_parseitem', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_bind', '_configure', '_configure_get', '_configure_set', '_displayof', '_do', '_draw_base_image', '_draw_meter', '_draw_solid_meter', '_draw_striped_meter', '_getboolean', '_getconfigure', '_getconfigure1', '_getdoubles', '_getints', '_grid_configure', '_gridconvvalue', '_last_child_ids', '_lookup_style_option', '_meter_value', '_nametowidget', '_noarg_', '_on_dial_interact', '_on_theme_change', '_options', '_register', '_report_exception', '_root', '_set_arc_offset_range', '_set_interactive_bind', '_set_meter_text', '_set_show_text', '_set_subtext', '_set_text_center', '_set_text_left', '_set_text_right', '_set_widget_colors', '_setup', '_setup_widget', '_subst_format', '_subst_format_str', '_substitute', '_tclCommands', '_unbind', '_windowingsystem', 'after', 'after_cancel', 'after_idle', 'anchor', 'bbox', 'bell', 'bind', 'bind_all', 'bind_class', 'bindtags', 'cget', 'clipboard_append', 'clipboard_clear', 'clipboard_get', 'columnconfigure', 'config', 'configure', 'deletecommand', 'destroy', 'event_add', 'event_delete', 'event_generate', 'event_info', 'focus', 'focus_displayof', 'focus_force', 'focus_get', 'focus_lastfor', 'focus_set', 'forget', 'getboolean', 'getdouble', 'getint', 'getvar', 'grab_current', 'grab_release', 'grab_set', 'grab_set_global', 'grab_status', 'grid', 'grid_anchor', 'grid_bbox', 'grid_columnconfigure', 'grid_configure', 'grid_forget', 'grid_info', 'grid_location', 'grid_propagate', 'grid_remove', 'grid_rowconfigure', 'grid_size', 'grid_slaves', 'identify', 'image_names', 'image_types', 'info', 'info_patchlevel', 'instate', 'keys', 'lift', 'location', 'lower', 'mainloop', 'nametowidget', 'option_add', 'option_clear', 'option_get', 'option_readfile', 'pack', 'pack_configure', 'pack_forget', 'pack_info', 'pack_propagate', 'pack_slaves', 'place', 'place_configure', 'place_forget', 'place_info', 'place_slaves', 'propagate', 'quit', 'register', 'rowconfigure', 'selection_clear', 'selection_get', 'selection_handle', 'selection_own', 'selection_own_get', 'send', 'setvar', 'size', 'slaves', 'state', 'step', 'tk_bisque', 'tk_focusFollowsMouse', 'tk_focusNext', 'tk_focusPrev', 'tk_setPalette', 'tk_strictMotif', 'tkraise', 'unbind', 'unbind_all', 'unbind_class', 'update', 'update_idletasks', 'wait_variable', 'wait_visibility', 'wait_window', 'waitvar', 'winfo_atom', 'winfo_atomname', 'winfo_cells', 'winfo_children', 'winfo_class', 'winfo_colormapfull', 'winfo_containing', 'winfo_depth', 'winfo_exists', 'winfo_fpixels', 'winfo_geometry', 'winfo_height', 'winfo_id', 'winfo_interps', 'winfo_ismapped', 'winfo_manager', 'winfo_name', 'winfo_parent', 'winfo_pathname', 'winfo_pixels', 'winfo_pointerx', 'winfo_pointerxy', 'winfo_pointery', 'winfo_reqheight', 'winfo_reqwidth', 'winfo_rgb', 'winfo_rootx', 'winfo_rooty', 'winfo_screen', 'winfo_screencells', 'winfo_screendepth', 'winfo_screenheight', 'winfo_screenmmheight', 'winfo_screenmmwidth', 'winfo_screenvisual', 'winfo_screenwidth', 'winfo_server', 'winfo_toplevel', 'winfo_viewable', 'winfo_visual', 'winfo_visualid', 'winfo_visualsavailable', 'winfo_vrootheight', 'winfo_vrootwidth', 'winfo_vrootx', 'winfo_vrooty', 'winfo_width', 'winfo_x', 'winfo_y']
[Finished in 455ms]

二:Meter创建

首先我们通过官方的一个例子来看Meter如何创建的

import ttkbootstrap as ttk
from ttkbootstrap.constants import *

app = ttk.Window()

meter = ttk.Meter(
  metersize=180,
  padding=5,
  amountused=25,
  metertype="semi",
  subtext="miles per hour",
  interactive=True,
)
meter.pack()

# update the amount used directly
meter.configure(amountused = 50)

# update the amount used with another widget
entry = ttk.Entry(textvariable=meter.amountusedvar)
entry.pack(fill=X)

# increment the amount by 10 steps
meter.step(10)

# decrement the amount by 15 steps
meter.step(-15)

# update the subtext
meter.configure(subtext="loading...")

app.mainloop()

三:Meter选项

以下是Meter接口的选项

__init__(self, master=None, bootstyle='default', arcrange=None, arcoffset=None, amounttotal=100, amountused=0, wedgesize=0, metersize=200, metertype='full', meterthickness=10, showtext=True, interactive=False, stripethickness=0, textleft=None, textright=None, textfont='-size 20 -weight bold', subtext=None, subtextstyle='default', subtextfont='-size 10', stepsize=1, **kwargs)

与官方的文档现在已经有些出入了,里面的一些字段也变更了

选项解释说明
master (Widget)父窗口
arcrange (int)从起点到终点的弧度范围。
arcoffset (int)偏移圆弧起始位置的量(以度为单位)。0位于3点钟方向。
amounttotal (int)仪表的最大值
amountused (int)仪表的当前值;如果“showtext”属性设置为True,则显示在中心标签中。
wedgesize (int)设置圆弧周围指示器楔块的长度。如果大于0,则此楔块将设置为以当前仪表值为中心的指示器。
metersize (int)Meter控件的大小
bootstyle (str)设置Meter的样式,选项:primary,secondary, success, info, warning, danger, light, dark.
metertype ('full', 'semi')将仪表显示为圆形或半圆。
meterthickness (int)指示器的厚度。
showtext (bool)指示是否在仪表上显示左侧、中间和右侧的文本标签。
interactive (bool)表示用户可以通过鼠标交互调整仪表值。
stripethickness (int)指示器可以显示为实心带,也可以显示为圆弧周围的条纹楔。如果该值大于0,指示器将从实心变为条纹,其中该值为条纹(或楔)的厚度。
textleft (str)插入到中心文本左侧的短字符串。
textright (str)插入到中心文本右侧的短字符串。
textfont (Union[str, Font])用于呈现中心文本的字体。
subtext (str)显示在中心文本下方的补充文本。
subtextstyle (str)设置subtext文本样式
subtextfont (Union[str, Font])设置subtext文本字体
stepsize (int)设置通过鼠标交互递增时更改仪表指示器的量。

下面再通过两个例子来展示如上选项的使用

from ttkbootstrap import Style
from ttkbootstrap.widgets import Meter

style = Style('cosmo')
root = style.master
root.title('ttkbootstrap')

print(help(Meter))

m1 = Meter(metersize=180, padding=20, amountused=25, metertype='semi', subtext='miles per hour', interactive=True)
m1.grid(row=0, column=0)

m2 = Meter(metersize=180, padding=20, amountused=1800, amounttotal=2600, subtext='storage used', textright='gb',
           bootstyle='info.TMeter', stripethickness=10, interactive=True)
m2.grid(row=0, column=1)

m3 = Meter(metersize=180, padding=20, stripethickness=2, amountused=40, subtext='project capacity', textright='%',
           bootstyle='success.TMeter', interactive=True)
m3.grid(row=1, column=0)

m4 = Meter(metersize=180, padding=20, amounttotal=280, arcrange=180, arcoffset=-180, amountused=75, textright='°',
           subtext='heat temperature', wedgesize=5, bootstyle='danger.TMeter', interactive=True)
m4.grid(row=1, column=1)

root.mainloop()

下面一个利用Meter来动态展示获取网卡io统计信息,也可以理解为网速的例子

import psutil,time,threading
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
root = ttk.Window()
ttk.Meter(
        master=root,
        bootstyle=DEFAULT,
        metertype="full",#将仪表显示为一个完整的圆形或半圆形(semi)
        wedgesize=5, #设置弧周围的指示器楔形长度,如果大于 0,则此楔形设置为以当前仪表值为中心的指示器
        amounttotal=50, #仪表的最大值,默认100
        amountused=10, #仪表的当前值
        metersize=200,#仪表大小
        showtext=True, #指示是否在仪表上显示左、中、右文本标签
        interactive=True, #是否可以手动调节数字的大小
        textleft='左边', #插入到中心文本左侧的短字符串
        textright='右边',
        textfont="-size 30", #中间数字大小
        subtext="文本",
        subtextstyle=DEFAULT,
        subtextfont="-size 20",#文本大小
        ).pack(side=ttk.LEFT, padx=5)
def _():
        meter = ttk.Meter(
                metersize=180,
                padding=50,
                amountused=0,
                metertype="semi",
                subtext="当前网速(kB/s)",
                subtextstyle="warning",
                interactive=False,
                bootstyle='primary',
                )
        meter.pack(side=ttk.LEFT, padx=5)
        while True:
                meter.configure(amountused=round(getNet(),2))
def getNet():
    recv_before = psutil.net_io_counters().bytes_recv
    time.sleep(1)
    recv_now = psutil.net_io_counters().bytes_recv
    recv = (recv_now - recv_before)/1024
    return recv

t = threading.Thread(target=_)
t.setDaemon(True)
t.start()
root.mainloop()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/593317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半监督节点分类:标签传播和消息传递

基础概念回顾 传统图机器学习的特征工程——节点层面&#xff0c;连接层面&#xff0c;全图层面 节点层面&#xff1a;信用卡欺诈 连接层面&#xff1a;推荐可能认识的人 全图层面&#xff1a;预测分子结构 半监督节点分类 半监督节点分类&#xff1a;用已知标签节点预测未…

推荐书单|提升境界、思维能力

1、《别做正常的傻瓜》 豆瓣评分&#xff1a;8.1 通过揭示人们在日常生活中常见的非理性行为&#xff0c;引导读者认识并克服这些行为&#xff0c;从而做出更明智的决策。 2、《活法》 豆瓣评分&#xff1a;8.1 稻盛和夫分享其人生哲学和经营哲学的著作&#xff0c;强调了正确…

【MATLAB】解决不同版本MATLAB出现中文乱码的问题

解决不同版本MATLAB出现中文乱码的问题 方法1&#xff1a;更改保存类型为GBK方法2&#xff1a;记事本打开方法3&#xff1a;Notepad参考 低版本matlab打开高版本Matlab的.m文件时&#xff0c;出现中文乱码问题。比如下图&#xff1a; 出现原因为&#xff1a; 编码格式不统一问…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位&#xff0c;它有助于医生快速、准确地识别和分析肺部病变。…

关于 Vue.js 双向数据绑定基本实现认知

写在前面 很早的一篇博客&#xff0c;整理了部分&#xff0c;蹭假期整理完博文内容涉及:双向数据绑定 实现方式简单介绍基于发布订阅、数据劫持的双向数据绑定两种不同实现(ES5/ES6) Demo&#xff0c;以及代码简单分析Object.defineProperty && Proxy API 介绍以及特性…

如何配置X86应用程序启用大地址模式(将用户态虚拟内存从2GB扩充到3GB),以解决用户态虚拟内存不够用问题?(项目实战案例解析)

目录 1、概述 2、为什么不直接将程序做成64位的&#xff1f; 3、进程内存不足导致程序发生闪退的案例分析 3.1、问题说明 3.2、将Windbg附加到程序进程上进行动态调试 3.3、动态调试的Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.4、malloc或new失败的…

企业微信主体能不能修改?

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

Java 三大特性之继承

目录 一、为什么需要继承&#xff1f; 二、继承概念 三、继承的语法 四、子类访问父类成员 五、super关键字 六、继承关系下的构造方法 七、继承关系下的初始化 八、protected关键字 九、继承的三种方式 十、final关键字 十一、继承和组合 一、为什么需要继承&#…

五一玩狗“丧志”记

我天生喜欢狗狗。五一来到媳妇老家这几天&#xff0c;只要有机会我都要给一个只叫“瘦瘦”的狗狗多攒一些吃的。 它是一条看家狗&#xff0c;有大人膝盖那么高八十厘米那么长。通体毛色以黄黑为主&#xff0c;少许白色主要集中在爪子和下巴。两耳直挺挺尖尖的竖立着&#xff0c…

mac通过termius连接Linux服务器

mac上安装 linux系统 如果有 linux服务器账号密码&#xff0c;那么上一步可忽略&#xff1b; 比如&#xff1a;直接连接阿里云或腾讯云账号 1. 安装termius 链接: https://pan.baidu.com/s/1iYsZPZThPizxqtkLPT89-Q?pwdbw6j 提取码: bw6j 官网 Termius - SSH platform for …

CNN实现fashion_mnist数据集分类(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、加载fashion_mnist数据与预处理 import numpy as np (train_images,train_labels),(test_images,test_labels) tf.keras.d…

[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)

文章涉及具体代码gitee&#xff1a; 登录 - Gitee.com 目录 1.插入排序 1.直接插入排序 总结 2.希尔排序 总结 2.选择排序 1.选择排序 ​编辑 总结 2.堆排序 总结 3.交换排序 1.冒泡排序 总结 2.快速排序 总结 4.归并排序 总结 5.总的分析总结 1.插入排…

抖音小风车一键跳转企业微信如何实现

我们在做抖音直播时&#xff0c;都喜欢挂上小风车去做转化&#xff0c;有的直播间小风车可以直接跳转到微信&#xff0c;这是怎么做到的呢&#xff1f;现在把这个经验给大家分享下&#xff1a; 首先我们需要先理解抖音直播间小风车是什么&#xff1f; 抖音小风车实际是一张直播…

c语言:打印任意行数的菱形

例如&#xff1a;以下图片形式 #include <stdio.h> int main() {int line 0;scanf_s("%d", &line);int i 0;//打印上半部分for (i 0; i < line; i){//打印空格数int j 0;for (j 0; j < line - 1 - i; j){printf(" ");}//打印*数量for…

内核中常用宏定义| container_of

文章目录 前言container_of函数介绍container_of函数实现container_of函数解析offsetof的使用container_of的使用结语 前言 前两篇我们写到内核中两种C语言高级语法__attribute__, __read_mostly。本篇写内核中另外一种常用宏定义之container_of container_of函数介绍 conta…

高级事件.

高级事件 1. 注册事件&#xff08;addEventListener)2.删除事件(removeEventListener&#xff09;3.DOM事件流4.事件对象及其方法&#xff08;当形参来看&#xff09;5.阻止默认事件/冒泡6.事件委托7.鼠标事件&#xff08;禁止右键/选中文字)8.鼠标事件对象8.常用键盘事件9.键盘…

【C++】模板初阶:泛型编程的起点

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

大模型下的Agent、AIGC的商业案例集合

算是一份摘录 1 AIGC 对影楼的影响 https://mp.weixin.qq.com/s/3j-6FAxZEEvXUZ1q6by2uw 2 出海Talkie &#xff1a;情感智能体 https://mp.weixin.qq.com/s/KHPmfuVvywxxcI2rqoOghA Talkie 为每条消息提供 3 个免费灵感&#xff0c;如果用户需要更多 AI 生成的灵感选项&…

Delta lake with Java--在spark集群上运行程序

昨天写了第一篇入门&#xff0c;今天看见有人收藏&#xff0c;继续努力学习下去。今天要实现的内容是如何将昨天的HelloDetlaLake 在spark集群上运行&#xff0c;。具体步骤如下 1、安装spark,我使用的是 spark-3.5.1-bin-hadoop3-scala2.13&#xff0c;去官网下载&#xff0c…

无穷级数错题本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <