GAS「ねこあつめ」IF文で条件に該当するねこ名を出力する「ねこあつめシリーズ:その4」

この記事では、GAS(Google Apps Script)でForループの中でIF文を使って、ある条件に該当するセルの値を取得する方法を掲載しています。
また、その条件とは、「セルに値が入っていない空欄」なので、NOTという演算子を使う書き方を学べます。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

まず、前回の復習をします。


このようなスプレッドシートから、A列の「なまえ」で2行目の「へきさにゃん」〜5行目の「とらきち」までログに出力します。
出力結果とコードです。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループでねこちゃん達の名前を出力
  for(let i=2;i<=lastRow;i++){
    console.log(ss.getRange(i,1).getValue());
  }
}

今回の内容に入る前に、「ねこあつめ」画像で癒されます(=^x^=)
このコは茶トラのヘキサにゃんです。

では、今回扱うスプレッドシートは、以下の様に用意いたしました。

一番右側の列「入力」の所に何も入っていない猫ちゃんの名前を出力します。
つまりこの例では、「ヘキサにゃん」と「とらきち」が出力されます。

Forループの中にIF文を書いていきます。
イメージは、こんな感じです。

「For
 「IF
 」

「」をブロッック( { } )に見立ててイメージすると分かりやすいかもしれません。

一番右の列が空白だったら、ということは、「セルの中身に何も入っていない」、つまり、言い換えると、
中身に文字が入っていることの否定」です。

この否定(NOT)は、先頭に「!」をつけて書きます。
いきなり論理演算NOTなんて出てくるとチョットびっくりしちゃいますよね。
ビックリマークなんて出てきたし。
そこで、懐かしのベン図を使って解説致します。
(ビックリマンも懐かしいな・・・。)

赤く塗っているところが「東京都民」です。

NOTを使うために「!」を使うと、東京都民では「ない」人が赤くなります。

「!東京都民」で例えば北海道とか沖縄が該当します。
この例では、「!なんか文字が入っている」→「空欄」を指定しています。

では、1番右の列に何も入っていない、つまり「!なんか入っている」場合に限り、猫ちゃんの名前を出力します。
7行目のIF文にご注目をお願いします。 

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループで入力の列に何も入っていない猫ちゃんたちの名前を出力
  for(let i=2;i<=lastRow;i++){
    if(!ss.getRange(i,4).getValue()){
      console.log(ss.getRange(i,1).getValue());
    };    
  }
}

実行結果です。

これで、「ヘキサにゃん」と「とらきち」が出力されました(=^x^=)
ご精読ありがとにゃん(=^x^=)

参考記事:【初心者向けGAS】条件分岐をするif文の使い方の超基本

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃん          次行くにゃっ→

GAS「ねこあつめ」Forループを使って猫たちの名前を取り出す「ねこあつめシリーズ:その3」

この記事では、GAS(Google Apps Script)でForループを使ってセルの値を取得する方法を掲載しています。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

まず、前回の復習を軽く行います。
このようなスプレッドシートで、セルA1からC3までの範囲を出力するコードを書きました。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValues(); //←ここをgetValue「s」と複数形に
  console.log(mikke);
}

今回の内容に入る前に、ねこあつめ画像で癒されます。

では、今回の内容に入ります。
スプレッドシートの「ねこあつめ」のおともだちに、新しいコ達を追加しました。

一番左にあるA列の最初の行はタイトルですが、その下は、

「2行目 ヘキサにゃん」
「3行目 みっけ」
「4行目 サビガー」
「5行目 とらきち」

となっています。
この2行目から5行目までの猫たちの名前をForループを使って取り出します。

最終行5行目は、今後新しいねこ仲間達を追加しても使えるように、最終行を、

lastRow=ss.getLastRow();

と書いて取得しています。
このスプレッドシートが5行なので「5」が求まります。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  console.log(lastRow);  //取得した行をログ表示
}

何かの処理をしたらすぐにログ出力をする癖を付けておくと、エラーに太刀打ち出来るねこさんに慣れるかもしれません。

では、いよいよループに入ります。

ループは

「初期値 ; どこまでおっきくするか ; 増分」

「初期値 ; どこまでちっちゃくするか ; 減り分」

などと書くので、この場合は、
「2;最後の行;1」
となり、
「2から始める:最後の行まで:1行ずつ増える」
と読み替えられれます。

この時行を、「2行目」、「3行目」、「4行目」、「5行目」と1行ずつ増やしていくのに使う変数に、慣習的に「i」などの変数を使います。

Aやbでもよくね、って思われる方もいらっしゃると思いますが、これは他の言語でも同じようにiなど使うので、これが出て来たら「ループなんだな」って押さえておくと宜しいかと思います。

では、コードを書いていきます。
(先程のlastRow=5のログは確認出来たので消しました。)

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  let lastRow=ss.getLastRow();//最終行を取得
  
  //ループでねこちゃん達の名前を出力
  for(let i=2;i<=lastRow;i++){
    console.log(ss.getRange(i,1).getValue());
  }
}

実行します。

無事に、猫たちの名前が取り出せました(=^x^=)

ご精読ありがとにゃん(=^x^=)

参考記事:【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃん 次行くにゃん→

GAS「ねこあつめ」でセルを選択して出力する「ねこあつめシリーズ:その2」

この記事では、GAS(Google Apps Script)でセルの値を取得する方法を掲載しています。

とてもシンプルな内容で、対象者は「猫が好きなGAS入門者」です。「ねこあつめアプリ」を題材に記事を書いています。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

簡易的ですが、「ねこあつめ」のキャラクター紹介の紹介をスプレッドシートで作りました。


このシートのA3のセル(みっけ)を出力してみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A3').getValue();
  console.log(mikke);
}

1行目で、SpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
2行目で、mikkeにセル「A3」の内容を入れています。
3行目で、ログ出力しています。

では、実行してみます。

この「’A3’」の所を、(3,1)としても同じ結果が得られます。
(行,列)の書き方になっているのでご注意を!
あと、この場合は「’ ‘」のシングルクォーテーションは使わないです。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange(3,1).getValue();
  console.log(mikke);
}

セル(3,1)と書いていて、この書き方をするとこの記事以降の記事で使うループなどで便利です。

では、次に複数のセルを含む範囲で作ってみます。
この表のセルA1からC3まで取得してみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValue();
  console.log(mikke);
}

実行してみます。

「最初のセルのみ」しか読み込めませんでした。

今度は「セルA1:C3」の指定した範囲全てを読み込める様に致します。
4行目を「getValues」にしてみます。

function myFunction() {
  const ss=SpreadsheetApp.getActiveSheet();
  const mikke=ss.getRange('A1:C3').getValues(); //←ここをgetValue「s」と複数形に
  console.log(mikke);
}

実行すると・・・。

このように出力されました。

よく見ると、[[‘A1′,’B1′,’C1’],[‘A2′,’B2′,’C2’],[‘A3′,’B3′,’C3’]]と、
二次元配列になっています。

ご精読ありがとうございました。

参考記事:【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃん          次行くにゃん♪→

GAS(Google Apps Script)「ねこあつめ」で文字出力と簡単な計算を作ってみた。「ねこあつめシリーズ:その1」

この記事を読む事によって、GASが本当に初めての方でも、文字出力と簡単な足し算の計算結果を表示させることが可能になります。
具体例として、「ねこあつめ」を例にしています。
これからGASの勉強を始める猫好きさん、ねこあつめアプリをお使いの方にはお楽しみ頂けると思います。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

コードを書く準備として、Googleドライブからスプレッドシートを追加します。
スプレッドシートは「新規」を押すと選択できます。

コードを書くエディタは、スプレッドシートのメニュー「拡張機能」から、Apps Scriptを選びます。

すると、このようなエディタが出てくるので、ここにコードを書いていきます。


まずは、「ねこあつめ」と表示するコードを早速書いていきます。

function myFunction() {
  console.log('ねこあつめ');
}

[Ctrl]+[S]で保存した後、[Ctrl]+[R] (Macでは[Command]+[R])で実行します。

実行結果です。

では、変数を使って、ここから計算をしてみます。
ねこあつめのねこたちの「せんとうりょく」の値を使います。

茶トラ猫の「ちゃとらさん」に、私は「ヘキサにゃん」という名前を付けました。
ヘキサにゃんの「せんとうりょく」は150です。

しまミケ猫さんに「しまみん」と名前を付けました。
「しまみん」の「せんとうりょく」は40です。
このヘキサにゃん(茶トラくん)としまみん(シマ三毛ちゃん)の戦闘力を足すと150+40=190になります。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  console.log(chatora + shimamike);
}

実行結果です。

これをもう少し、日本語の体裁を整えて書きます。
文字列を囲むときは、シングルクォーテーションではなく、「`」(@のキーをシフトで押す)で囲い、数字を文字列の中に埋め込むには、${数字}と入力します。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  let goukei=chatora+shimamike;

  console.log(`茶とらくん「${chatora}」 +しまみけちゃん「${shimamike}」の「せんとうりょく」の合計は「${goukei}」です。`);
}

実行結果です。

最後に、メッセージボックスの表示をします。
コードを追記します。

function myFunction() {

  console.log('ねこあつめ');

  let chatora = 150, shimamike = 40;
  let goukei=chatora+shimamike;

  console.log(`茶とらくん「${chatora}」 +しまみけちゃん「${shimamike}」の「せんとうりょく」の合計は「${goukei}」です。`);

  Browser.msgBox('ねこあつめ');

}

下記の処理で、「このアプリは確認されていません」と表示されてしまった場合は、こちらから解決可能です。

実行して、スプレッドシートに切り替えると、下記のようなボックスが表示されます。

「OK」でボックスを閉じます。

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

                         次へ行くにゃん→

【初めてのGAS(Google Apps Script)】自作などのサンプル集、書籍とサイト紹介

このコーナーでは、Googleの様々なサービスを連携して開発出来るプログラミング言語、GAS(Google Apps Script グーグル アップス スクリプト)について、

・今日から始める方向けの簡単な自作サンプル

・学習にオススメのサイトを初心者目線で学習アウトプット

・プログラミング学習コンテンツの同じ問題をGASとPythonで回答

などを掲載しております。

ハンターハンターの自作サンプルでGASの第一歩を学習

大谷翔平の目標シート

■ 学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASで解いてみたサンプル集■

PythonとGASでpaizaレベルアップ問題集を解いてみた集


※ 私はGASの書籍やサイトを紹介しているだけのただの一読者、閲覧者であり、著者の方とは面識がございません

いつも隣にITのお仕事」様のブログで自習して自分の環境で動かしたコードも掲載しています。

・ウェブサイト
【保存版】初心者向け実務で使えるGoogle Apps Script完全マニュアル



■ スプレッドシートとGASに慣れてきたら、GASでChatworkにメッセージを送って見る ■

「ねこあつめその1」文字の表示と簡単な計算


「ねこあつめその2」セルを選択して出力する

「ねこあつめその3」Forループを使って猫たちの名前を取り出す


「ねこあつめその4」IF文で条件に該当するねこ名を出力する

「ねこあつめその5」出力したセルに処理済み「済」を出力する

「ねこあつめその6」ループに制御を加えて一つずつ出力する

「ねこあつめその7」の行の範囲を取得する

「ねこあつめその8」の右端の列をクリアする

「ねこあつめその9」Chatworkを使う前にIT用語学習

「ねこあつめその10」GASで「Chatwork」を使ってみる。


「ねこあつめその11」GASで「Chatwork」に送る(=^x^=)mm

「ねこあつめその12」GASでChatworkに「トリガー」で時限式に送る

「ねこあつめシリーズその13」GASで「ねこあつめ」ChatworkのAPIトークンにプロパティストアを使って格納する

「ねこあつめシリーズその14」GASで「ねこあつめ」のデータをChatworkに送信にながら配列に慣れていく

「ねこあつめシリーズその15」Chatworkに送るメッセージを装飾する

「ねこあつめシリーズその16」ドキュメンテーションコメントを追加(最終回)

◆フォーム作成の学習ノート◆

<ねこフォーム1>「ねこあつめ親睦会」のフォームを作ってみる

<ねこフォーム2>GASで作成したフォームを指定のフォルダに格納する

<ねこフォーム3>GASで作成したフォームに「ねこあつめ」の「おなまえ」と「あそんだグッズ」を追加する

<ねこフォーム4>ねこあつめフォームに「メールアドレス」を追加する

<ねこフォーム5>ねこあつめフォームに「ラジオボタン」を追加する

<ねこフォーム6>ねこあつめフォームに「チェックボックス」を追加する

<ねこフォーム7>ねこあつめフォームに「プルダウンリスト」を追加する

<ねこフォーム8>ねこあつめフォームに「スケールアイテム」と「パラグラフテキストアイテム」を追加する

◆ フォーム実践編 ◆

<ねこフォーム実践編1>就職セミナーアンケート


<ねこフォーム実践編2>プログラミング学習アンケート

<ねこフォーム実践編3>「就職氷河期世代&大人の発達障害」読者アンケート

■ Gmail ■

メール定型文を下書きへGo!!

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

Google Workspaceに戻る
写真クリエイターとしての活動


自己紹介


Gallery of Examples FBO Canvasを作ってみた!

この記事では、「Python Kivyプログラミング Pythonで作るマルチタッチアプリ」という本を頼りに、章の終わりごとに本と対応するKivy公式サイト(英語で泣きそう)のサンプルプログラムに挑戦しています。

上の本の、5章を終えた所までで類題として作れるアプリです。

Gallery of Examples FBO Canvas

このアプリは、

この記事の分からない英単語を調べながら読んで行きます。
ちなみに私の英語能力は英検4級(3級落ちた)です。

・instead …代わりに

・Buffer…一時保存用の記憶領域

・attach….添付

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

コードです。

all=(‘FboFloatLayout’,)

from kivy.graphics import Color,Rectangle,Canvas,ClearBuffers,ClearColor
from kivy.graphics.fbo import Fbo
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty,NumericProperty
from kivy.app import App
from kivy.core.window import Window
from kivy.animation import Animation
from kivy.factory import Factory

class FboFloatLayout(FloatLayout):
texture=ObjectProperty(None,allownone=True)
alpha=NumericProperty(1)

def init(self,kwargs):
self.canvas=Canvas()
with self.canvas:
self.fbo=Fbo(size=self.size)
self.fbo_color=Color(1,1,1,1)
self.fbo_rect=Rectangle()
with self.fbo: ClearColor(0,0,0,0)
ClearBuffers()

#全てのインストラクションを待ってキャンバスにテクスチャーを設置する self.texture=self.fbo.texture
super(FboFloatLayout,self).init(kwargs)
def add_widget(self,largs):

#キャンバスの代わりにグラフィックを添付するトリック canvas=self.canvas
self.canvas=self.fbo ret=super(FboFloatLayout,self).add_widget(largs)
self.canvas=canvas
return ret

def remove_widget(self,largs): canvas=self.canvas self.canvas=self.fbo super(FboFloatLayout,self).remove_widget(largs)
self.canvas=canvas

def on_size(self,instance,value):
self.fbo.size=value
self.texture=self.fbo.texture
self.fbo_rect.size=value

def on_pos(self,instance,value):
self.fbo_rect.pos=value

def on_texture(self,instance,value):
self.fbo_rect.texture=value

def on_alpha(self,instance,value):
self.fbo_color.rgba=(1,1,1,value)

class ScreenLayerApp(App):
def build(self):
f=FboFloatLayout()
b=Factory.Button(text=”FBO”,size_hint=(None,None))
f.add_widget(b)

def anim_btn(*args):
if b.pos[0]==0:
Animation(x=f.width-b.width).start(b)
else:
Animation(x=0).start(b)
b.bind(on_press=anim_btn)
return f

if name == “main”:
ScreenLayerApp().run()

ボタン「FBO」が左右に動くアニメーションが作れました。

これを上下に動くように遊んでみます。


class ScreenLayerApp(App):
def build(self):
f=FboFloatLayout()
b=Factory.Button(text=”FBO”,size_hint=(None,None))
f.add_widget(b)

#ここを、xをy、widthをheightに変える
def anim_btn(*args):
if b.pos[0]==0:
Animation(y=f.height-b.height).start(b)
else:
Animation(y=0).start(b)
b.bind(on_press=anim_btn)
return f

このように遊べました(=^x^=)

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

■ 関連記事 ■

Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Kivy Gallery Examples 「Lines Extended Demo」を作ってみた!

この記事では、「Python Kivyプログラミング Pythonで作るマルチタッチアプリ」という本を頼りに、章の終わりごとに本と対応するKivy公式サイト(英語で泣きそう)のサンプルプログラムに挑戦しています。

上の本の、5章を終えた所までで類題として作れるアプリです。

Kivy Gallery Examples 「Lines Extended Demo」

このアプリは、円、楕円、長方形、とベジエ曲線(多分一番分かりやすいと思うサイト)を描きます。

この記事の分からない英単語を調べながら読んで行きます。
ちなみに私の英語能力は英検4級(3級落ちた)です。

extended…拡張された
static…静的
padding…余白
spacing…間隔

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

コードです。

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.lang import Builder

Builder.load_string(”’

<LineEllipse1>:#赤い楕円1
canvas:
Color:
rgba:1,.1,.1,.9
Line:
width:2.
ellipse:(self.x,self.y,self.width,self.height)
Label:
center:root.center
text:’Ellipse’

<LineEllipse2>:#赤い楕円2
canvas:
Color:
rgba:1,.1,.1,.9
Line:
width:2.
ellipse:(self.x,self.y,self.width,self.height,90,180)
Label:
center:root.center
text:’Ellipse from 90 to 180′
#fun result with low segments!

<LineEllipse3>:#赤い楕円3
canvas:
Color:
rgba:1,.1,.1,.9
Line:
width:2.
ellipse:(self.x,self.y,self.width,self.height,90,720,10)
Label:
center:root.center
text:’Ellipse from 90 to 720\n10 segments’
halign:’center’

<LineCircle1>:#緑の円1
canvas:
Color:
rgba:.1,1,.1,.9
Line:
width:2.
circle:
(self.center_x,self.center_y,min(self.width,self.height)/2)
Label:
center:root.center
text:’Circle’

<LineCircle2>:#緑の円2
canvas:
Color:
rgba:.1,1,.1,.9
Line:
width:2.
circle:
(self.center_x,self.center_y,min(self.width,self.height)/2,90,180)
Label:
center:root.center
text:’Circle from 90 to 180′

<LineCircle3>:#緑の円3
canvas:
Color:
rgba:.1,1,.1,.9
Line:
width:2.
circle:
(self.center_x,self.center_y,min(self.width,self.height)/2,90,180,10)
Label:
center:root.center
text:’Circle from 90 to 180\n10 segments’
helign:’center’

<LineCircle4>:#緑の円4
canvas:
Color:
rgba:.1,1,.1,.9
Line:
width:2.
circle:
(self.center_x,self.center_y,min(self.width,self.height)/2,0,360)
Label:
center:root.center
text:’Circle from 0 to 360′
halign:’center’

<LineRectangle>:#青い四角
canvas:
Color:
rgba:.1,.1,1,.9
Line:
width:2.
rectangle:(self.x,self.y,self.width,self.height)
Label:
center:root.center
text:’Rectangle’

<LineBezier>:#青いベジェ曲線
canvas:
Color:
rgba:.1,.1,1,.9
Line:
width:2.
bezier:
(self.x,self.y,self.center_x-40,self.y+100,
self.center_x+40,self.y-100,self.right,self.y)
Label:
center:root.center
text:’Bezier’
”’)


class LineEllipse1(Widget):
pass
class LineEllipse2(Widget):
pass
class LineEllipse3(Widget):
pass
class LineCircle1(Widget):
pass
class LineCircle2(Widget):
pass
class LineCircle3(Widget):
pass
class LineCircle4(Widget):
pass
class LineRectangle(Widget):
pass
class LineBezier(Widget):
pass

class LineExtendedApp(App):
def build(self):
root=GridLayout(cols=2,padding=50,spacing=50)
root.add_widget(LineEllipse1())
root.add_widget(LineEllipse2())
root.add_widget(LineEllipse3())
root.add_widget(LineCircle1())
root.add_widget(LineCircle2())
root.add_widget(LineCircle3())
root.add_widget(LineCircle4())
root.add_widget(LineRectangle())
root.add_widget(LineBezier())
return root


if name == ‘main’:
LineExtendedApp().run()

実行結果です。

ここから少し遊びます(=^x^=)

長方形とベジェ曲線が見づらいので、色を黄色に変えます。

<LineRectangle>:#黄色い四角
canvas:
Color:
rgba:1,1,.1,.9
Line:
width:2.
rectangle:(self.x,self.y,self.width,self.height)
Label:
center:root.center
text:’Rectangle’
<LineBezier>:#黄色いベジェ曲線
canvas:
Color:
rgba:1,1,.1,.9
Line:
width:2.
bezier:
(self.x,self.y,self.center_x-40,self.y+100,
self.center_x+40,self.y-100,self.right,self.y)
Label:
center:root.center
text:’Bezier’

このようになりました。

では、楕円2の孤の表示される角度を変えて、色をマゼンタ(ピンク)に変え、太さを5にします。

<LineEllipse2>:#ピンクの楕円2
canvas:
Color:
rgba:1,.1,1,.9
Line:
width:5.
ellipse:(self.x,self.y,self.width,self.height,180,270)
Label:
center:root.center
text:’Ellipse from 180 to 270′

次に、多角形の角数を10角から20角に変えます。

<LineEllipse3>:#赤い楕円3
canvas:
Color:
rgba:1,.1,.1,.9
Line:
width:2.
ellipse:(self.x,self.y,self.width,self.height,90,720,20)
Label:
center:root.center
text:’Ellipse from 90 to 720\n20 segments’
halign:’center’

最後に円4を0度から360度のところを270度に変えます。

<LineCircle4>:#緑の円4
canvas:
Color:
rgba:.1,1,.1,.9
Line:
width:2.
circle:
(self.center_x,self.center_y,min(self.width,self.height)/2,0,270)
Label:
center:root.center
text:’Circle from 0 to 270′
halign:’center’

このように遊べました(=^x^=)

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

■ 関連記事 ■

Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Kivy Gallery Examples 「Bezier Example」を作ってみた!

この記事では、「Python Kivyプログラミング Pythonで作るマルチタッチアプリ」という本を頼りに、章の終わりごとに本と対応するKivy公式サイト(英語で泣きそう)のサンプルプログラムに挑戦しています。

上の本の、5章を終えた所までで類題として作れるアプリです。

Kivy Gallery Examples 「Bezier Example」

このアプリは、多角形とベジェ曲線(多分一番分かりやすいと思うサイト)を2つのスライダーを使って描きます。
紫の多角形と、赤いベジエ曲線です。

この記事の分からない英単語を調べながら読んで行きます。
ちなみに私の英語能力は英検4級(3級落ちた)です。

bezier…ベジェ曲線
computed…計算された
polygon…多角形
recompute…再計算

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.slider import Slider
from kivy.graphics import Color,Bezier,Line


class BezierTest(FloatLayout):
def init (self,points=[],loop=False,args,kwargs): super(BezierTest,self).init(args,kwargs)
self.d=10 #pixel tolerance(支える) when clicking on a point
self.points=points
self.loop=loop
self.current_point=None #index of point being dragged

with self.canvas:
Color(1.0,0.0,0.0)
self.bezier=Bezier(points=self.points,
segments=150,
loop=self.loop,
dash_length=100,
dash_offset=10)
Color(1.0,0.0,1.0)
self.line=Line(points=self.points+self.points[:2],
dash_offset=10,
dash_length=100)

s=Slider(y=0,pos_hint={‘x’:.3},size_hint=(.7,None),height=50)
s.bind(value=self._set_bezier_dash_offset)
self.add_widget(s)

s=Slider(y=50,pos_hint={‘x’:.3},size_hint=(.7,None),height=50)
s.bind(value=self._set_line_dash_offset)
self.add_widget(s)

def _set_bezier_dash_offset(self,instance,value):
#effect to raduce(減らす) length while increase offset
self.bezier.dash_length=100-value
self.bezier.dash_offset=value

def _set_line_dash_offset(self,instance,value):
#effect to reduce length while increase offset
self.line.dash_length=100-value
self.line.dash_offset=value

def on_touch_down(self,touch):
if self.collide_point(touch.pos[0],touch.pos[1]):
for i,p in enumerate(list(zip(self.points[::2],
self.points[1::2]))):

if(abs(touch.pos[0]-self.pos[0]-p[0])<self.d and \
abs(touch.pos[1]-self.pos[1]-p[1])<self.d):
self.current_point=i+1
return True
return super(BezierTest,self).on_touch_down(touch)

def on_touch_up(self,touch):
if self.collide_point(touch.pos[0],touch.pos[1]):
if self.current_point:
self.current_point=None
return True

return super(BezierTest,self).on_touch_up(touch)
def on_touch_move(self,touch):
if self.collide_point(touch.pos[0],touch.pos[1]):
c=self.current_point

if c:
self.points[(c-1)2]=touch.pos[0]-self.pos[0] self.points[(c-1)2+1]=touch.pos[1]-self.pos[1]
self.bezier.points=self.points
self.line.points=self.points+self.points[:2]
return True
return super(BezierTest,self).on_touch_move(touch)

class Main(App):
def build(self):
from math import cos,sin,radians
x=y=150
z=100
#Pacman!
points=[x,y]
for i in range(45,360,45):
i=radians(i)
points.extend([x+cos(i)z,y+sin(i)z])
return BezierTest(points=points,loop=True)

if name == ‘main’:
Main().run()

実行結果です。

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

<<関連記事>>

Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Kivy Gallery Examples 「Canvas stress」を作ってみた!

この記事では、「Python Kivyプログラミング Pythonで作るマルチタッチアプリ」という本を頼りに、章の終わりごとに本と対応するKivy公式サイト(英語で泣きそう)のサンプルプログラムに挑戦しています。

上の本の、5章を終えた所までで類題として作れるアプリです。

Kivy公式Gallery of Examples 「Canvas stress」

このアプリは、画面下のボタンを押すと、その分だけ小さいカラフルな四角を、画面に散りばめることが出来ます。

”’Canvas stress
この例は、指定のボタンを押すと小さい四角が追加されます。
ボタンは黒いスクリーンの下にあります。
”’

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る


from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from kivy.graphics import Color,Rectangle
from random import random as r
from functools import partial


class StressCanvasApp(App):
def add_rects(self,label,wid,count,largs): label.text=str(int(label.text)+count)

with wid.canvas:

#ここで、大きさを変えることができる
for x in range(count): Color(r(),1,1,mode=’hsv’)
Rectangle(pos=(r()wid.width+wid.x,
r()wid.height+wid.y),size=(20,20))


def double_rects(self,label,wid,largs):
count=int(label.text)
self.add_rects(label,wid,count,largs)


def reset_rects(self,label,wid,largs):
label.text=’0′
wid.canvas.clear()

def build(self):
wid=Widget()

label=Label(text=’0′)
btn_add100=Button(text=’+ 100 rects’,
on_press=partial(self.add_rects,label,wid,100))

btn_add500=Button(text=’+ 500 rects’,
on_press=partial(self.add_rects,label,wid,500))

btn_double=Button(text=’x 2′,
on_press=partial(self.double_rects,label,wid))

btn_reset=Button(text=’Reset’,
on_press=partial(self.reset_rects,label,wid))

layout=BoxLayout(size_hint=(1,None),height=50)
layout.add_widget(btn_add100)
layout.add_widget(btn_add500)
layout.add_widget(btn_double)
layout.add_widget(btn_reset)
layout.add_widget(label)
root=BoxLayout(orientation=’vertical’)
root.add_widget(wid)
root.add_widget(layout)
return root

if name == ‘main’:
StressCanvasApp().run()

このような四角が表示されました。

ここからちょっと遊んでみます(=^x^=)
上のコードの「大きさを変えられる」のところで、size=(20,20)を100にしてみます。

このように遊べました。

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

<<関連記事>>

Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Kivy tutorial 006: Let’s draw something(お絵かき);を作ってみた!

この記事では、「Python Kivyプログラミング Pythonで作るマルチタッチアプリ」という本を頼りに、章の終わりごとに本と対応するKivy公式サイト(英語で泣きそう)のサンプルプログラムに挑戦しています。

上の本の、5章を終えた所までで類題として作れるアプリです。

公式サイト
Kivy tutorial 006: Let’s draw something

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

前回 の記事の最後のコードに追記したコードを掲載します。
追記したところはコメントがついています。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.slider import Slider
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle,Color


class DrawingWidget(Widget):
def init(self):
super(DrawingWidget,self).init()
with self.canvas:
Color(1,1,1,1)#赤、緑、青、透明度
self.rect=Rectangle(size=(self.size),
pos=self.pos)

#前回のコードから追記 
Color(1,0,0,1)
Rectangle(size=(300,100),
pos=(300,200))
self.bind(pos=self.update_rectangle,
size=self.update_rectangle)

def update_rectangle(self,instance,value):
self.rect.pos=self.pos
self.rect.size=self.size

class DrawingApp(App):
def build(self):
root_widget=DrawingWidget()
return root_widget
DrawingApp().run()

実行します。

このコードを修正・追記して、ランダムな色で落書きが出来るようにします。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.slider import Slider
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle,Color,Line
from random import random


class DrawingWidget(Widget):
def init(self):
super(DrawingWidget,self).init()
with self.canvas:
Color(1,1,1,1)#赤、緑、青、透明度
self.rect=Rectangle(size=self.size,
pos=self.pos)

#修正
self.rect_colour=Color(1,0,0,1)
Rectangle(size=(300,100),
pos=(300,200))
self.bind(pos=self.update_rectangle,
size=self.update_rectangle)
def update_rectangle(self,instance,value):
self.rect.pos=self.pos
self.rect.size=self.size
def on_touch_down(self,touch):

super(DrawingWidget,self).on_touch_down(touch)
with self.canvas:
Color(random(),random(),random())
self.line=Line(points=[touch.pos[0],touch.pos[1]],width=2)

def on_touch_move(self,touch):
self.line.points=self.line.points+[touch.pos[0],touch.pos[1]]

class DrawingApp(App):
def build(self):
root_widget=DrawingWidget()
return root_widget

DrawingApp().run()

今日の日付を書きました。

「Kivyというライブラリを使ってPythonでアプリを作って行く」に戻る

<<関連記事>>

Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について