Senior's Blog

ゴルフ(Golf)、python(Pythonista)、メンタルヘルスに関するブログです。

(18)Textview

今回はTextviewです。

TextField,labelとほぼ同じですが、複数行の場合、改行コードが必要です。

改行コードは¥nではなく、\nでないとだめです。

🔵Textview

    テキストビュー名は「textview1」です。

 (1)セット関数

  呼び出されるごとに、引数の文字列をセットし、改行コードを付加します。

        def setTextview(sender, txt):

            txtview = sender.superview['textview1']

            txtview.text += (txt + \n)

 

    (2)呼出し

        txt = 'test'

        setTextview(sender, txt)

 

🔴サンプルプログラム

 開始値をテキストフィールド1に、終了値をテキストフィールド2に入力し、

 2のべき乗か否かをチェックし、2のべき乗ならその数値を

 テキストビュー1にセットしていき、同時に、その個数を順次、

 ラベル1に表示していきます。

 実行はボタン1押下でスタートです。

(1)UI画面

f:id:SuzyLW:20191020132416j:plain

(2)ソースコード

#Sample program for checking of 'power of 2'
import ui

#Checking for 'power of 2' or not
def checkPower(sender, num):
  n2 = 0
  c = num
  ret = [0, 0]
  if num == 1: #2^0
    ret[0] = 1
    ret[1] = 0
    return ret
  elif num == 0:
    return ret
  if (num & (num-1)) == 0:
    ret[0] = 1 #set flg.
    while c != 0:
      c = c/2
      n2 += 1 #power
      if c < 2:
        break
    ret[1] = n2

  return ret

#Checking for range
def checkStartToEnd(sender, st, ed):
  if st < ed:
    return 0
  else:
    return 1

#Start Button Click Proc.
def StartBtnOn(sender):
  txt1 = sender.superview['textfield1'] #start num.
  txt2 = sender.superview['textfield2'] #end num.
  txtv = sender.superview['textview1'] #result
  labelN = sender.superview['label6'] #Num. of matching
  txtv.text = ''
  sNum = int(txt1.text)
  eNum = int(txt2.text)
  matchNum = 0
  ret = checkStartToEnd(sender, sNum, eNum)
  if ret == 0:
    ct = sNum #current num.
    res = [0, 0] #list of return. flg,power
    while ct < eNum:
      res = checkPower(sender, ct)
      if res[0] != 0:
        txtv.text += (str(ct) + ' ' + '2^' + str(res[1]) + '\n')
        matchNum += 1
        labelN.text = str(matchNum)
      ct += 1
  else:
    print('開始値と終了値の関係が不正です。正しく入力してください。')

v = ui.load_view()
v.present('sheet')

 

(3)実行結果

始値を0、終了値を100にした場合の実行結果を以下に示します。

f:id:SuzyLW:20191020134734j:plain