Разное

Работа с кнопками в с: Работа с кнопками

Содержание

Пошаговое руководство. Создание кнопки с помощью XAML — WPF .NET Framework

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 12 мин

Это пошаговое руководство предназначено для изучения того, как с помощью XAML можно создать анимированную кнопку для использования в приложении Windows Presentation Foundation. В этом пошаговом руководстве для создания ресурса настраиваемой кнопки используются стили и шаблон, что обеспечивает повторное использование кода и разделение логики кнопки от объявления кнопки. Код в этом пошаговом руководстве полностью написан на языке XAML.

Важно!

В этом пошаговом руководстве показано, как можно создать приложение путем ввода или копирования и вставки кода на языке XAML в Visual Studio. Если вы хотите узнать, как для создания того же приложения использовать конструктор, см. статью Создание кнопки с помощью Microsoft Expression Blend.

На следующем рисунке показаны готовые кнопки.

Создание основных кнопок

Начнем с создания проекта и добавления нескольких кнопок в окно.

Создание проекта WPF и добавление кнопок в окно

  1. Запустите Visual Studio.

  2. Создайте новый проект WPF: в меню

    Файл нажмите сначала пункт Создать, а затем Проект. Найдите шаблон Приложение Windows (WPF) и назначьте проекту имя «AnimatedButton». В результате будет создана основная структура для приложения.

  3. Добавьте основные кнопки по умолчанию: Все файлы, необходимые для этого пошагового руководства, предоставляются шаблоном. Откройте файл Window1.xaml, дважды щелкнув его в Обозревателе решений. По умолчанию в файле Window1.xaml есть элемент Grid. Удалите элемент Grid и добавьте несколько кнопок на страницу XAML, введя или вставив следующий фрагмент кода в файл Window1.xaml:

    <Window x:Class="AnimatedButton.Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="AnimatedButton"
      Background="Black">
      <!-- Buttons arranged vertically inside a StackPanel. -->
      <StackPanel HorizontalAlignment="Left">
          <Button>Button 1</Button>
          <Button>Button 2</Button>
          <Button>Button 3</Button>
      </StackPanel>
    </Window>
    

    Нажмите клавишу F5, чтобы запустить приложение; вы увидите набор кнопок, как это представлено на следующем рисунке.

    Теперь, после создания основных кнопок, можно завершить работу с файлом Window1.xaml. Дальше в этом пошаговом руководстве основное внимание уделяется файлу app.xaml, в котором определяются стили и шаблон кнопок.

Задание основных свойств

Давайте настроим некоторые свойств этих кнопок, чтобы осуществить управление их внешним видом и макетом. Вместо того, чтобы настраивать свойства кнопок по отдельности, нужно использовать ресурсы для определения свойств кнопок во всем приложении. Ресурсы приложений концептуально похожи на внешние каскадные таблицы стилей (CSS) для веб-страниц; однако ресурсы намного эффективней каскадных таблицы стилей (CSS), в чем можно будет убедиться в конце этого пошагового руководства. Дополнительные сведения о ресурсах см. в разделе Ресурсы XAML.

Использование стилей для задания основных свойств кнопок

  1. Определите блок Application.Resources: откройте файл app.xaml и добавьте следующий выделенный фрагмент разметки, если он еще отсутствует в этом файле:

    <Application x:Class="AnimatedButton.
    App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml" > <Application.Resources> <!-- Resources for the entire application can be defined here. --> </Application.Resources> </Application>

    Область ресурса определяется тем, где определяется ресурс. Определение ресурсов в Application.Resources в файле app.xaml позволяет использовать ресурсы в любом месте приложения. Дополнительные сведения об определении области ресурсов см. в статье Ресурсы XAML.

  2. Создайте стиль и определите с его помощью базовые значения свойств: добавьте следующую разметку в блок Application.Resources. Эта разметка создает объект Style, который применяется ко всем кнопкам в приложении и задает для свойства кнопок Width значение 90 и для свойства Margin значение 10:

    <Application.Resources>
      <Style TargetType="Button">
        <Setter Property="Width" Value="90" />
        <Setter Property="Margin" Value="10" />
      </Style>
    </Application. Resources>
    

    Свойство TargetType определяет то, что стиль применяется ко всем объектам типа Button. Каждый объект Setter задает разные значения свойств для объекта Style. Таким образом, на этом этапе каждая кнопка в приложении имеет ширину величиной 90 и отступ величиной 10. Если нажать клавишу F5 для запуска приложения, отобразится следующее окно.

    Существует намного больше возможностей по работе со стилями, включая различные способы точной настройки целевых объектов, указание сложных значений свойств и даже использование стилей в качестве входных данных для других стилей. Более подробную информацию см. в разделе Стилизация и использование шаблонов.

  3. Задайте для ресурса значение свойства стиля: ресурсы позволяют простым образом использовать часто определяемые объекты и значения. Особенно эффективным является определение с помощью ресурсов сложных значений для того, чтобы сделать код более модульным. Добавьте следующий выделенный фрагмент с разметкой в файл app. xaml.

    <Application.Resources>
      <LinearGradientBrush x:Key="GrayBlueGradientBrush" StartPoint="0,0" EndPoint="1,1">
        <GradientStop Color="DarkGray" Offset="0" />
        <GradientStop Color="#CCCCFF" Offset="0.5" />
        <GradientStop Color="DarkGray" Offset="1" />
      </LinearGradientBrush>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="{StaticResource GrayBlueGradientBrush}" />
        <Setter Property="Width" Value="80" />
        <Setter Property="Margin" Value="10" />
      </Style>
    </Application.Resources>
    

    Непосредственно под блоком Application.Resources вы создали ресурс с именем GrayBlueGradientBrush. Этот ресурс определяет горизонтальный градиент. Этот ресурс можно использовать в качестве значения свойства из любого места в приложении, включая метод задания стиля кнопки для свойства Background. Теперь у всех кнопок имеется значение свойства Background как у этого градиента.

    Нажмите клавишу F5 для запуска приложения. Это должно выглядеть примерно так.

Создание шаблона, определяющего внешний вид кнопки

В этом разделе создается шаблон, который настраивает внешний вид (представление) кнопки. Внешний вид кнопки состоит из нескольких объектов, включая прямоугольники и другие компоненты, позволяющие придать кнопке уникальный вид.

До сих пор управление тем, как кнопки выглядят в приложении, ограничивалось изменением свойств кнопки. А что если нужно внести более радикальные изменения во внешний вид кнопки? Шаблоны предоставляют более широкие возможности по управлению внешним видом объекта. Так как шаблоны можно использовать в стилях, шаблоны применимы ко всем объектам, к которым применяется стиль (в этом пошаговом руководстве это кнопка).

Использование шаблона для определения внешнего вида кнопки

  1. Настройте шаблон: вследствие того, что у таких элементов управления, как Button имеется свойство Template, можно определить значение свойства шаблона также, как другие значения свойств, которые задавались ранее в объекте Style с помощью объекта Setter.

    Добавьте следующий выделенный фрагмент с разметкой в стиль кнопки.

    <Application.Resources>
      <LinearGradientBrush x:Key="GrayBlueGradientBrush"
        StartPoint="0,0" EndPoint="1,1">
        <GradientStop Color="DarkGray" Offset="0" />
        <GradientStop Color="#CCCCFF" Offset="0.5" />
        <GradientStop Color="DarkGray" Offset="1" />
      </LinearGradientBrush>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="{StaticResource GrayBlueGradientBrush}" />
        <Setter Property="Width" Value="80" />
        <Setter Property="Margin" Value="10" />
        <Setter Property="Template">
          <Setter.Value>
            <!-- The button template is defined here. -->
          </Setter.Value>
        </Setter>
      </Style>
    </Application.Resources>
    
  2. Измените внешний вид кнопки: на этом этапе нужно определить шаблон. Добавьте следующий выделенный фрагмент с разметкой. В этой разметке задаются два элемента Rectangle с округленными краями, после которых задается объект DockPanel. Объект DockPanel используется для размещения объекта ContentPresenter кнопки. Объект ContentPresenter выполняет отображение содержимого кнопки. В этом пошаговом руководстве содержимое — это текст («Кнопка 1», «Кнопка 2», «Кнопка 3»). Все компоненты шаблона (прямоугольники и объект DockPanel) размещаются внутри объекта Grid.

    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid ClipToBounds="True">
          <!-- Outer Rectangle with rounded corners. -->
          <Rectangle x:Name="outerRectangle" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke="{TemplateBinding Background}" RadiusX="20" RadiusY="20" StrokeThickness="5" Fill="Transparent" />
          <!-- Inner Rectangle with rounded corners. -->
          <Rectangle x:Name="innerRectangle" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke="Transparent" StrokeThickness="20" Fill="{TemplateBinding Background}" RadiusX="20" RadiusY="20" />
          <!-- Present Content (text) of the button.
    --> <DockPanel Name="myContentPresenterDockPanel"> <ContentPresenter x:Name="myContentPresenter" Margin="20" Content="{TemplateBinding Content}" TextBlock.Foreground="Black" /> </DockPanel> </Grid> </ControlTemplate> </Setter.Value>

    Нажмите клавишу F5 для запуска приложения. Это должно выглядеть примерно так.

  3. Добавьте в шаблон эффект стекла: далее нужно добавить эффект стекла. Сначала нужно создать некоторые ресурсы, которые воспроизводят эффект градиента как у стекла. Добавьте эти ресурсы градиента в любое место в блоке Application.Resources:

    <Application.Resources>
      <GradientStopCollection x:Key="MyGlassGradientStopsResource">
        <GradientStop Color="WhiteSmoke" Offset="0.2" />
        <GradientStop Color="Transparent" Offset="0.4" />
        <GradientStop Color="WhiteSmoke" Offset="0.5" />
        <GradientStop Color="Transparent" Offset="0. 75" />
        <GradientStop Color="WhiteSmoke" Offset="0.9" />
        <GradientStop Color="Transparent" Offset="1" />
      </GradientStopCollection>
      <LinearGradientBrush x:Key="MyGlassBrushResource"
        StartPoint="0,0" EndPoint="1,1" Opacity="0.75"
        GradientStops="{StaticResource MyGlassGradientStopsResource}" />
    <!-- Styles and other resources below here. -->
    

    Эти ресурсы используются как свойство Fill для прямоугольника, который вставляется в объект Grid из шаблона кнопки. Добавьте в шаблон следующий выделенный фрагмент с разметкой.

    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Grid
          ClipToBounds="True">
        <!-- Outer Rectangle with rounded corners. -->
        <Rectangle x:Name="outerRectangle" HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch" Stroke="{TemplateBinding Background}"
          RadiusX="20" RadiusY="20" StrokeThickness="5" Fill="Transparent" />
        <!-- Inner Rectangle with rounded corners.  -->
        <Rectangle x:Name="innerRectangle" HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch" Stroke="Transparent" StrokeThickness="20"
          Fill="{TemplateBinding Background}" RadiusX="20" RadiusY="20" />
        <!-- Glass Rectangle -->
        <Rectangle x:Name="glassCube" HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch"
          StrokeThickness="2" RadiusX="10" RadiusY="10" Opacity="0"
          Fill="{StaticResource MyGlassBrushResource}"
          RenderTransformOrigin="0.5,0.5">
          <Rectangle.Stroke>
            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
              <LinearGradientBrush.GradientStops>
                <GradientStop Offset="0.0" Color="LightBlue" />
                <GradientStop Offset="1.0" Color="Gray" />
              </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
          </Rectangle.Stroke>
          <!-- These transforms have no effect as they are declared here.
          The reason the transforms are included is to be targets
          for animation (see later).  -->
          <Rectangle.RenderTransform>
            <TransformGroup>
              <ScaleTransform />
              <RotateTransform />
            </TransformGroup>
          </Rectangle.RenderTransform>
          <!-- A BevelBitmapEffect is applied to give the button a "Beveled" look. -->
          <Rectangle.BitmapEffect>
            <BevelBitmapEffect />
          </Rectangle.BitmapEffect>
        </Rectangle>
        <!-- Present Text of the button. -->
        <DockPanel Name="myContentPresenterDockPanel">
          <ContentPresenter x:Name="myContentPresenter" Margin="20"
            Content="{TemplateBinding  Content}" TextBlock.Foreground="Black" />
        </DockPanel>
      </Grid>
    </ControlTemplate>
    </Setter.Value>
    

    Обратите внимание, что свойство Opacity прямоугольника (у которого помимо этого есть свойство x:Name равное «glassCube») имеет значение 0, поэтому при запуске этого примера не отображается «стеклянный» прямоугольник, наложенный сверху. Это сделано для того, чтобы позже добавить в шаблон триггеры для реализации взаимодействия пользователя с кнопкой. Однако можно посмотреть, как выглядит кнопка сейчас, изменив значение Opacity на 1 и запустив приложение. См. следующий рисунок. Прежде чем переходить к следующему шагу, измените значение Opacity обратно на 0.

Создание интерактивности для кнопки

В этом разделе создаются триггеры свойств и триггеры событий, выполняющие изменение значений свойств и запуск анимации в ответ на действия пользователя, такие как перемещение указателя мыши на кнопку и нажатие кнопки.

Простым способом для добавления интерактивности (при наведении указателя мыши, выходе указателя мыши, нажатии кнопки мыши и т. д.) является определение триггеров в шаблоне или стиле. Чтобы создать Trigger, нужно определить условие для свойства, например: значение свойства IsMouseOver у кнопки равняется true. Затем нужно определить методы задания (действия), которые выполняются, когда условие триггера имеет значение «true».

Создание интерактивности для кнопки

  1. Добавьте в шаблон триггеры: добавьте выделенный фрагмент с разметкой в свой шаблон.

    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Grid
          ClipToBounds="True">
          <!-- Outer Rectangle with rounded corners. -->
          <Rectangle x:Name="outerRectangle" HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch" Stroke="{TemplateBinding Background}"
          RadiusX="20" RadiusY="20" StrokeThickness="5" Fill="Transparent" />
          <!-- Inner Rectangle with rounded corners. -->
          <Rectangle x:Name="innerRectangle" HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch" Stroke="Transparent"
            StrokeThickness="20"
            Fill="{TemplateBinding Background}" RadiusX="20" RadiusY="20"
          />
          <!-- Glass Rectangle -->
          <Rectangle x:Name="glassCube" HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            StrokeThickness="2" RadiusX="10" RadiusY="10" Opacity="0"
            Fill="{StaticResource MyGlassBrushResource}"
            RenderTransformOrigin="0. 5,0.5">
            <Rectangle.Stroke>
              <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                <LinearGradientBrush.GradientStops>
                  <GradientStop Offset="0.0" Color="LightBlue" />
                  <GradientStop Offset="1.0" Color="Gray" />
                </LinearGradientBrush.GradientStops>
              </LinearGradientBrush>
            </Rectangle.Stroke>
            <!-- These transforms have no effect as they
                 are declared here.
                 The reason the transforms are included is to be targets
                 for animation (see later). -->
            <Rectangle.RenderTransform>
              <TransformGroup>
                <ScaleTransform />
                <RotateTransform />
              </TransformGroup>
            </Rectangle.RenderTransform>
              <!-- A BevelBitmapEffect is applied to give the button a
                   "Beveled" look. -->
            <Rectangle.BitmapEffect>
              <BevelBitmapEffect />
            </Rectangle. BitmapEffect>
          </Rectangle>
          <!-- Present Text of the button. -->
          <DockPanel Name="myContentPresenterDockPanel">
            <ContentPresenter x:Name="myContentPresenter" Margin="20"
              Content="{TemplateBinding  Content}" TextBlock.Foreground="Black" />
          </DockPanel>
        </Grid>
        <ControlTemplate.Triggers>       <!-- Set action triggers for the buttons and define            what the button does in response to those triggers. -->     </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
    
  2. Добавьте триггеры свойств: добавьте выделенный фрагмент с разметкой в блок ControlTemplate.Triggers:

    <ControlTemplate.Triggers>
      <!-- Set properties when mouse pointer is over the button. -->   <Trigger Property="IsMouseOver" Value="True">     <!-- Below are three property settings that occur when the           condition is met (user mouses over button).   -->     <!-- Change the color of the outer rectangle when user           mouses over it. -->     <Setter Property ="Rectangle.Stroke" TargetName="outerRectangle"       Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />     <!-- Sets the glass opacity to 1, therefore, the           glass "appears" when user mouses over it. -->     <Setter Property="Rectangle.Opacity" Value="1" TargetName="glassCube" />     <!-- Makes the text slightly blurry as though you           were looking at it through blurry glass. -->     <Setter Property="ContentPresenter.BitmapEffect"        TargetName="myContentPresenter">       <Setter.Value>         <BlurBitmapEffect Radius="1" />       </Setter.Value>     </Setter>   </Trigger>
    <ControlTemplate.Triggers/>
    

    Нажмите клавишу F5, чтобы запустить приложение и посмотреть проявление эффекта при наведении указателя мыши на кнопку.

  3. Добавьте триггер фокуса: далее можно добавить аналогичные методы задания для обработки ситуации, когда кнопка получает фокус (например, после ее нажатия пользователем).

    <ControlTemplate.Triggers>
      <!-- Set properties when mouse pointer is over the button. -->
      <Trigger Property="IsMouseOver" Value="True">
        <!-- Below are three property settings that occur when the
             condition is met (user mouses over button).  -->
        <!-- Change the color of the outer rectangle when user          mouses over it. -->
        <Setter Property ="Rectangle.Stroke" TargetName="outerRectangle"
          Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
        <!-- Sets the glass opacity to 1, therefore, the          glass "appears" when user mouses over it. -->
        <Setter Property="Rectangle.Opacity" Value="1"       TargetName="glassCube" />
        <!-- Makes the text slightly blurry as though you were          looking at it through blurry glass. -->
        <Setter Property="ContentPresenter.BitmapEffect"       TargetName="myContentPresenter">
          <Setter.Value>
            <BlurBitmapEffect Radius="1" />
          </Setter. Value>
        </Setter>
      </Trigger>
      <!-- Set properties when button has focus. -->   <Trigger Property="IsFocused" Value="true">     <Setter Property="Rectangle.Opacity" Value="1"       TargetName="glassCube" />     <Setter Property="Rectangle.Stroke" TargetName="outerRectangle"       Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />     <Setter Property="Rectangle.Opacity" Value="1" TargetName="glassCube" />   </Trigger>
    </ControlTemplate.Triggers>
    

    Нажмите клавишу F5, чтобы запустить приложение, а затем нажмите одну из кнопок. Обратите внимание, что кнопка остается выделенной после нажатия кнопки, так как на ней по-прежнему сохраняется фокус. Если нажать другую кнопку, то фокус получит эта новая кнопка, а прежняя кнопка его потеряет.

  4. Добавление анимаций дляMouseEnterиMouseLeave: далее добавим некоторые варианты анимации для триггеров. Добавьте следующую разметку в любое место блока ControlTemplate.Triggers.

    <!-- Animations that start when mouse enters and leaves button. -->
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
      <EventTrigger.Actions>
        <BeginStoryboard Name="mouseEnterBeginStoryboard">
          <Storyboard>
          <!-- This animation makes the glass rectangle shrink in the X direction. -->
            <DoubleAnimation Storyboard.TargetName="glassCube"
              Storyboard.TargetProperty=
              "(Rectangle.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
              By="-0.1" Duration="0:0:0.5" />
            <!-- This animation makes the glass rectangle shrink in the Y direction. -->
            <DoubleAnimation
            Storyboard.TargetName="glassCube"
              Storyboard.TargetProperty=
              "(Rectangle.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
              By="-0.1" Duration="0:0:0.5" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger. Actions>
    </EventTrigger>
    <EventTrigger RoutedEvent="Mouse.MouseLeave">
      <EventTrigger.Actions>
        <!-- Stopping the storyboard sets all animated properties back to default. -->
        <StopStoryboard BeginStoryboardName="mouseEnterBeginStoryboard" />
      </EventTrigger.Actions>
    </EventTrigger>
    

    «Стеклянный» прямоугольник сокращается в размере, когда указатель мыши перемещается над кнопкой и возвращается к нормальному размеру при выходе указателя мыши из области кнопки.

    Здесь есть две анимации, которые активируются, когда указатель мыши находится над кнопкой (вызывается событие MouseEnter). В этих анимациях «стеклянный» прямоугольник уменьшается в размерах по осям X и Y. Обратите внимание на свойства у элементов DoubleAnimation — Duration и By. Свойство Duration указывает, что анимация выполняется в течение половины секунды, а свойство By указывает, что «стеклянный» слой сжимается на 10 %.

    Второй триггер события (MouseLeave) просто останавливает первый. При остановке объекта Storyboard все анимированные свойства возвращаются к значениям по умолчанию. Таким образом, когда пользователь убирает указатель с кнопки, кнопка возвращается к тому виду, который у нее был до перемещения указателя мыши на кнопку. Дополнительные сведения об анимации см. в разделе Общие сведения об эффектах анимации.

  5. Добавьте анимацию при нажатии кнопки: в качестве последнего шага добавим триггер для случая, когда пользователь нажимает кнопку. Добавьте следующую разметку в любое место блока ControlTemplate.Triggers:

    <!-- Animation fires when button is clicked, causing glass to spin.  -->
    <EventTrigger RoutedEvent="Button.Click">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation Storyboard.TargetName="glassCube"
              Storyboard.TargetProperty=
              "(Rectangle.RenderTransform).(TransformGroup.Children)[1].(RotateTransform.Angle)"
              By="360" Duration="0:0:0. 5" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
    

    Нажмите клавишу F5, чтобы запустить приложение, а затем нажмите одну из кнопок. При нажатии кнопки «стеклянный» прямоугольник вращается.

Сводка

В этом пошаговом руководстве были выполнены следующие практические задания:

  • Создание объекта Style в соответствии с целевым типом объекта (Button).

  • Управление основными свойствами кнопок во всем приложении с помощью объекта Style.

  • Создание таких ресурсов, как градиенты, используемые в соответствии со значениями свойств из методов задания Style.

  • Настройка внешнего вида кнопок во всем приложении путем применения к кнопкам шаблона.

  • Настройка поведения кнопок в ответ на действия пользователя (такие как MouseEnter, MouseLeave и Click) с эффектами анимации.

См. также раздел

  • Создание кнопки с помощью Microsoft Expression Blend
  • Стилизация и использование шаблонов
  • Общие сведения об эффектах анимации
  • Общие сведения о закраске сплошным цветом и градиентом
  • Общие сведения об эффектах для точечных рисунков

Python и Tkinter | Кнопки

Последнее обновление: 10. 09.2022

Одним из наиболее используемых компонентов в графических программах является кнопка. В tkinter кнопки представлены классом Button. Основные параметры виджета Button:

  • command: функция, которая вызывается при нажатии на кнопку

  • compund: устанавливает расположение картинки и текста относительно друг друга

  • cursor: курсор указателя мыши при наведении на метку

  • image: ссылка на изображение, которое отображается на метке

  • pading: отступы от границ вилжета до его текста

  • state: состояние кнопки

  • text: устанавливает текст метки

  • textvariable: устанавливает привязку к элементу StringVar

  • underline: указывает на номер символа в тексте кнопки, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается

  • width: ширина виджета

Добавим в окно обычную кнопку из пакета ttk:


from tkinter import *
from tkinter import ttk

root = Tk()
root. title("METANIT.COM")
root.geometry("250x200")

# стандартная кнопка
btn = ttk.Button(text="Button")
btn.pack()

root.mainloop()

Для создания кнопки используется конструктор Button(). В этом конструкторе с помощью параметра text можно установить текст кнопки.

Чтобы разместить виджет в контейнере (главном окне), у него вызывается метод pack(). На ОС Windows мы получим следующую кнопку:

Конструктор Button определяет различные параметры, которые позволяют настроить поведение и внешний вид кнопки. Однако конкретный набор параметров зависит от того, используем ли мы кнопки из пакета tkinter или из пакета tkinter.ttk.

Обработка нажатия на кнопку

Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command, присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:


from tkinter import *
from tkinter import ttk

clicks = 0

def click_button():
    global clicks
    clicks += 1
    # изменяем текст на кнопке
    btn["text"] = f"Clicks {clicks}"    

root = Tk()
root. title("METANIT.COM")
root.geometry("250x150")

btn = ttk.Button(text="Click Me", command=click_button)
btn.pack()

root.mainloop()

Здесь в качестве обработчика нажатия устанавливается функция click_button. В этой функции изменяется глобальная переменная clicks, которая хранит число кликов. Кроме того, изменяем текст кнопки, чтобы визуально было видно сколько нажатий произведено. Таким образом, при каждом нажатии кнопки будет срабатывать функция click_button, и количество кликов будет увеличиваться:

Отключение кнопки

Для ttk-кнопки мы можем установить отключенное состояние с помощью метода state(), передав ему значение «disabled». С такой кнопкой пользователь не сможет взаимодействовать:


from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

btn = ttk.Button(text="Click Me", state=["disabled"])
btn.pack()

root. mainloop()

При этом в метод state мы можем передать набор состояний, поэтому значение «disabled» передается внутри списка.

НазадСодержаниеВперед

eLearning Solutions Company For Business

что мы делаем.

Интеллектуальное обучение, которое работает вместе, вовлекает ваших сотрудников и вдохновляет на реальные изменения.
Геймификация
10 готовых игровых шаблонов и виртуальная игровая обучающая среда.

Узнать больше

Виртуальная реальность
360° интерактивных впечатлений, доступных в любом месте и на любом устройстве.

Узнать больше

Практика с видео
Улучшите производительность сотрудников и навыки общения с помощью практики на основе видео.

Узнать больше

Средства разработки
Создавайте учебные курсы любого типа — мобильные, интерактивные, доступные.

Подробнее

Платформы обучения
Предоставляйте, отслеживайте и управляйте обучением на платформе, которая растет вместе с вами.

Подробнее

Стратегия обучения
Используйте проверенные стратегии, которые работают для лучшего обучения.

Подробнее

Индивидуальное обучение
Мы адаптируем обучение к вашим конкретным потребностям и бюджету.

Подробнее

Расширение штата
Наймите краткосрочных или долгосрочных консультантов, которые снимают стресс.

Узнать больше

от ведущих брендов.

Мы помогли тысячам компаний добиться исключительных результатов в разработке, проведении и отслеживании обучения.
Есть проект? Мы можем помочь.

начинается в ELB Learning.

Наши специалисты по обучению заинтересованы в вашем успехе. Мы понимаем ваши потребности и можем обеспечить измеримые результаты. Мы работаем в гибкой среде и предлагаем решения, которые подходят для любых сроков и бюджета.

«ELB Learning взяла на себя очень сложный набор учебных задач, которые у нас были в Twitch, и предоставила восхитительный опыт, который стал хитом с первого дня. Не могу рекомендовать их больше!”

Гас Мурад

Глобальный директор отдела продаж

«Нам нравится ELB Learning, потому что они делятся своим мнением и дают советы. Нам не нужен партнер, который просто делает то, что мы просим. Мы хотим, чтобы нам бросили вызов. Компания ELB стремится сделать продукт лучше и гордится своей работой».

Черный матовый

Директор по обучению

«ELB — это универсальный магазин со всем необходимым. Отличное обслуживание клиентов. Взаимодействие и техподдержка очень хорошие. Нечасто встретишь его там, где можно взаимодействовать с поставщиком на разных уровнях».

Джей Стивенс

Генеральный директор и соучредитель

Признан одним из лучших среди лучших.

Начните создавать впечатления уже сегодня.

Наши продукты и услуги помогут вам создать комплексное обучение. Позвольте нам помочь вам добраться туда.
Свяжитесь с нами

801.796.2767

8:00–17:00 по тихоокеанскому стандартному времени

Позвоните сейчас »

Сообщество Rockstar

Встречайтесь с коллегами из Rockstar, делитесь своими творениями, узнавайте советы и рекомендации и многое другое!

Посетите сообщество »

База знаний

Посетите базу знаний, где вы найдете учебные пособия, справочные статьи и руководства по началу работы со всеми нашими продуктами.

Начать обучение »

Работа в Button: отзывы сотрудников и культура

Button Обзор

Button — это платформа оптимизации мобильной коммерции, которая позволяет компаниям получать доход за счет торговли в своих мобильных приложениях и на веб-сайтах. Благодаря технологии с более высокой конверсией, Button встраивает коммерческие действия в приложения для издателей, чтобы бренды могли развивать свой мобильный бизнес, издатели могли увеличивать свои доходы от мобильных устройств, а потребители могли получать больше удовольствия от покупок на мобильных устройствах. Сократив разрыв между просмотром и покупкой, Баттон на сегодняшний день потратил более 2 миллиардов долларов. Основанная в 2014 году, компания Button привлекла более 64 миллионов долларов венчурного капитала и неизменно признается одним из лучших мест для работы Fortune, Inc., Entrepreneur и Crain’s.Button — относительно молодая компания. Она была основана только в 2014 году. Эта развивающаяся компания любит нанимать выпускников Бейкер-колледжа, 10,0% ее сотрудников учились в Бейкер-колледже. Если вы хотите проверить еще несколько известных компаний, вы можете найти другие отличные места для работы в списке Zippia «Лучшие компании для работы» в Нью-Йорке, штат Нью-Йорк. Компания Button, базирующаяся в Нью-Йорке, штат Нью-Йорк, представляет собой небольшую технологическую компанию, в которой работает всего 25 сотрудников, а годовой доход составляет 740 000 долларов США.

Миссия организации

Предоставление технологии SaaS, которая помогает колледжам и университетам увеличить количество зачисленных и удерживаемых студентов за счет устранения барьеров в процессе финансовой помощи.

Работать на кнопке?

Поделитесь своим опытом

Культура компании Button

Информация предоставлена ​​компанией

Мы ищем позитивного и целеустремленного маркетолога, увлеченного технологиями и получающего заряд энергии от ежедневной работы в нескольких командах.

Команда на кнопке

Button Зарплата

Самая высокооплачиваемая работа в компании Button

8,7

Оценка разнообразия

Мы рассчитали показатель разнообразия компаний, измеряя множество факторов, включая этническое происхождение, гендерную идентичность и языковые навыки их сотрудников.

Кнопка Гендерное распределение

Женщины

Резюме исследования. Используя базу данных из 30 миллионов профилей, Zippia оценивает демографию и статистику для Button. Наши оценки проверяются на соответствие BLS, переписи населения и текущим данным о вакансиях. После обширных исследований и анализа команда Zippia по обработке и анализу данных обнаружила, что:

  • Баттон имеет 25 сотрудников .

  • 64% сотрудников Button составляют женщины , а 36% мужчины.

  • Самая распространенная этническая группа в Баттоне — белые (66%).

  • 14% сотрудников Button — латиноамериканцы или латиноамериканцы.

  • 11% сотрудников Button — чернокожие или афроамериканцы.

  • Средний сотрудник Button зарабатывает 61 506 долларов в год.

  • В среднем сотрудники Button работают в компании 3,8 года.

Расположение кнопок

Ранг Город Количество вакансий Среднее. Зарплата
1 Нью -Йорк, Нью -Йорк 8 $ 67 394

9018.

Помогите нам сделать эту компанию более прозрачной.

Кнопка Видеоролики о трудоустройстве

Кнопка EasyOrder от Forward Staffing

Кнопка Финансовые показатели

6. 6

Оценка эффективности

Мы рассчитали оценку эффективности компаний путем измерения множества факторов, включая доход, долговечность и показатели фондового рынка.

Как бы вы оценили культуру компании Button?

Вы работали в Баттоне? Помогите другим соискателям, оценив кнопку.

Часто задаваемые вопросы о кнопке

Когда был основан Баттон?

Компания Button была основана в 2014 году.

Сколько сотрудников имеет компания Button?

В компании Button работает 25 сотрудников.

Сколько денег зарабатывает Баттон?

Кнопка приносит 740 000 долларов дохода.

В какой отрасли работает Баттон?

Кнопка находится в индустрии компьютерного программирования.

Какова миссия Баттона?

Заявление о миссии Button: «Предоставлять технологию SaaS, которая помогает колледжам и университетам увеличить количество зачисленных и удерживаемых студентов за счет устранения барьеров в процессе финансовой помощи».

Что за компания Баттон?

Баттон является частной компанией.

Кто конкуренты Баттона?

Конкурентами Button являются Curious.com, AppleTree.com, Playful Studios.

Кто работает в Button?

Майкл Джакони (соучредитель и генеральный директор)

Крис Мэддерн (основатель)

Майк Дудас (основатель)

Показать больше

Вы исполнительный директор, руководитель отдела кадров или бренд-менеджер в компании Button?

Создать и обновить профиль своей компании на Zippia можно легко и бесплатно.

Zippia предоставляет подробную информацию о Баттоне, включая зарплаты, политические взгляды, данные о сотрудниках и многое другое, чтобы информировать соискателей о Баттоне. Данные о сотрудниках основаны на информации от людей, которые сами сообщили о своей прошлой или текущей работе в Button. Данные на этой странице также основаны на источниках данных, собранных из общедоступных и открытых источников данных в Интернете и других местах, а также на частных данных, которые мы получили по лицензии от других компаний.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *