質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2256閲覧

pythonでボタンの数を動的に配置したい

hiro04kon

総合スコア46

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/05/19 12:00

python学習中の者です。
ボタンを押すと様々なことができるアプリを作りたいのですが、ボタンの要素が変動的なので、
縦と横の数を入力することで、それに応じたボタン数を配置したいです。
動的でなければ、ボタンの要素をその分だけ書けばいいのですが…。

python

1#! env python 2# -*- coding: utf-8 -*- 3 4import wx 5 6####配列#### 7tate = int(input())    #行数を入力 8yoko = int(input())    #列数を入力 9 10class MyFrame(wx.Frame): 11 def __init__(self): 12 wx.Frame.__init__(self, None, -1, ”パネル”, size=(300,150)) 13 self.comp() 14 15 def comp(self): 16 mainPanel = wx.Panel(self) 17 button1 = wx.Button(mainPanel, -1, "Button 1") 18 button2 = wx.Button(mainPanel, -1, "Button 2") 19 button3 = wx.Button(mainPanel, -1, "Button 3") 20       … 21 22 # Create a sizer. 23 sizer = wx.GridSizer( tate , yoko , 5, 10) 24 sizer.Add(button1, flag=wx.EXPAND) 25 sizer.Add(button2, flag=wx.EXPAND) 26 sizer.Add(button3, flag=wx.EXPAND) 27      … 28 mainPanel.SetSizer(sizer) 29 30if __name__ == '__main__': 31 app = wx.PySimpleApp() 32 MyFrame().Show(True) 33 app.MainLoop()

「def comp(self):」以下にどのように記述すればいいでしょうか?

python

1mainPanel = wx.Panel(self) 2for i in range( tate * yoko ) : 3 buttoni = wx.Button(mainPanel, -1, "Button " + str(i) ) 4 5sizer = wx.GridSizer( tate , yoko , 5, 10) 6for j in range( tate * yoko ) : 7 sizer.Add(buttonj, flag=wx.EXPAND)

などと考えてみましたが、「NameError: name 'buttonj' is not defined」となり動きません。
ものすごく、簡単なことかもしれませんが、お知恵を貸してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

buttoni, buttonj だと別の変数になるので、配列にすると良いと思います。

python

1mainPanel = wx.Panel(self) 2button = [] 3for i in range( tate * yoko ) : 4 button.append(wx.Button(mainPanel, -1, "Button " + str(i) )) 5 6sizer = wx.GridSizer( tate , yoko , 5, 10) 7for j in range( tate * yoko ) : 8 sizer.Add(button[j], flag=wx.EXPAND)

投稿2021/05/19 13:00

yh1224

総合スコア653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro04kon

2021/05/20 03:46 編集

早速のご返答ありがとうございます。 最初、ボタンが一つしか表示されなく、どうしたものか、と思っていたら、 最後に「mainPanel.SetSizer(sizer)」 を忘れていただけでした。 思い通りの結果になりました。ありがとうございました!
guest

0

button をリストにすれば、button[i]でアクセスできます

投稿2021/05/19 12:59

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro04kon

2021/05/19 22:41

早速の返信ありがとうございます。 リストにしてチャレンジしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問