Рубрики
Без рубрики

Веб-приложение Python для игры в шарадах

Этот пост является частью календаря Anvil Advent – мы создаем веб-приложение каждый день в течение 24 дней, используя … Tagged с Python, WebDev.

Этот пост является частью Календарь Anvil Advent – Мы создаем веб-приложение каждый день в течение 24 дней, ничего не используя, кроме Python! На 12 день мы сделали приложение идеально подходящим для виртуальной рождественской вечеринки!

(Особая благодарность моему коллеге Райану за это приложение!)

Каждый любит хорошую игру Charades на Рождество, это причина, по которой мы все можем свидетельствовать о плохом впечатлении Элвиса один раз в год!

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

Проверьте это здесь

Выбор случайной фразы

Выбор случайной фразы из базы данных приложения была проста с Таблицы данных Anvil Service и Случайный модуль Python Отказ

Мы создали функцию Getter в модуле серверов приложений, что получает все фразы из таблицы данных приложений, а затем использует Выбор () Функция, чтобы выбрать случайную фразу.

from random import randint

@anvil.server.callable
def get_phrase():
  # Return a random phrase from the phrases data table
  return choice(app_tables.phrase.search())['phrase']

На стороне клиента мы создали get_phrase () Функция, которая работает каждый раз, кто-нибудь нажимает на Покажите мне кнопку фразы Отказ

def show_phrase_button_click(self, **event_args):
    """This method is called when the button is clicked"""
    self.phrase_label.text = anvil.server.call('get_phrase')

Затем мы отредактировали таблицу фраз в IDE IDE и добавили некоторые фразы для игры.

Строительство таймера

Чтобы приложить приложение более полезным, мы подумали, что было бы хорошо построить простой таймер в приложение.

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

def __init__(self, **properties):
    # Set Form properties and Data Bindings.
    self.init_components(**properties)

    # Init the default countdown for the form
    self.countdown = 60  

def countdown_textbox_change(self, **event_args):
  """This method is called when the text in the countdown text box is edited"""
    # Set the forms countdown to whatever number is entered by the user
    self.countdown = self.countdown_textbox.text

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

Мы начали, импортируя модуль времени в верхней части формы.

Тогда мы создали start_timer_click () Функция, которая содержала цикл While, которая проверяет обратный отсчет, все еще выше. Каждая итерация использует time.sleep () Функция, чтобы сделать паузу на одну секунду, а затем минус один из обратного отсчета. Как только обратный отсчет ударится ноль, Таймер сброшен, а предупреждение запущено для информирования пользователя.

RESET_TIMER_BUTTON_CLICK () Просто ломает цикл While в start_timer_click () Установив Обратный отсчет переменная до минус одного. Мы использовали минус один, чтобы нажатием кнопки сброса, она также не вызывает предупреждение.

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

def start_timer_click(self, **event_args):
  """This method is called when the start button is clicked"""
  # Change buttons from start to reset
  self.change_timer_buttons()
  # Countdown
  while self.countdown > 0:
    self.countdown_textbox.text = self.countdown = self.countdown - 1
    time.sleep(1)
  # Send an alert if the time runs out
  if self.countdown == 0:
    anvil.alert(anvil.Label(text="Time's up!", align="center",font_size=30))
  # Reset buttons and timer field
  self.countdown = 60
  self.countdown_textbox.text = None
  self.change_timer_buttons()


def reset_timer_button_click(self, **event_args):
  """This method is called when the reset button is clicked"""
  # Stop the timer by tripping the 'while self.countdown > 0' in start_timer_clock()
  self.countdown = -1


def change_timer_buttons(self):
  """This method swaps the visibility of the start and reset timer buttons"""
  self.reset_timer_button.visible = not self.reset_timer_button.visible 
  self.start_timer_button.visible = not self.start_timer_button.visible

Вот и все, простой таймер, написанный все на стороне клиента Python.

Оригинал: “https://dev.to/anvil/a-python-web-app-for-playing-charades-dce”