投稿者: himeport

Outlookなどから送付されたメールに「winmail.dat」というファイルが添付されている場合があります。

Thunderbirdを利用している場合は、アドオンを追加することで通常の添付ファイルと同様に扱うことができるようになります。

いくつか対応するプラグインがあるようですが、一例として「LookOut」を利用してみました。

Thunderbird 69.10.0/LINUXをご利用の場合、現時点(2020.01.02)ではアドオン動作環境の78.0以降へのUpdateがサポートされないため、「他のバージョンを見る」から「バージョン2.0.4」をダウンロードしてアドオンすることで利用できます。

ちなみにYahooメールを持っている場合は、Yahooメールに転送することで「winmail.dat」の内容が確認できます。但し、日本語ファイル名だとファイル名が文字化けしてしまいます。

ホームページにカートボタンを置こう!

WordPressで作成されたホームページであれば、「WooCommerce」や「Welcart」のプラグインを使うことでホームページ自体をショップ化することは比較的容易ですが、決済システムの導入やセキュリティ管理など考え始めるとなかなか難しい点もあります。

そこで、先の記事で書いたYahooショップを用意して、そのカートをホームページやブログに置いてショップ化することと頻繁に商品内容が変わらないのであれば、運用はYahooショップに絞れますので簡単になります。

ただ、これには欠点があり、複数種類の商品を1つのカートに入れるような購入方法が難しくなります。(できるのかもしれませんが、現時点(2020年2月)のYahooカートに「お買い物を続ける」ボタンがないので、購入元に戻れません。)

STORESのストアボタンだとこれができてしまいます。その代わりにカートに入れる前に熨斗の設定など購入オプションはつけられません。個数はカートページで、熨斗などオプションは備考で記載して頂く形になります。

STORESを始める

STORESから必要事項を登録していくことで簡単に作成することができます。

登録は簡単ですが、注意しないとあとで後悔することがあります。

特に独自ドメインを設定される方は、気をつけないといけません。

(なんで、こんな大事なこと、FAQを読まないと書いてないんだ!と思ってしまいましたが)

独自ドメインを設定してもカートのドメインは、元々の「https://?????.store.jp」となります。

そして、独自ドメインを申請後はこの「https://?????.store.jp」を変更することはできません。

なので、

独自ドメインを設定する場合でも「https://?????.store.jp」でお客さんが見てもおかしくない設定を事前にしておきましょう。

クレジット決済の審査は、指示される手順通りに進めてショップの基本設定が入力できた時点で審査が始まります。特に別途提出書類はありません。審査には通過したのがわかるのが2W程度、実際に使えるようになるのが1M程度となるようです。AmazonPayの申請は、3日程度で完了するようです。

ストアボタン機能を使い、カートボタンを貼り付ける

ショップがオープンできたら、いよいよストアボタンを作成設置します。

ストアボタンの作成は、STORESのストア設定(管理ページトップの右上のショップ名の所をクリックしたメニューにあります。)を開くと

「ストアボタンを設置」の設置をクリックすると、設定画面となります。

大きさ、デザインなど必要に応じて設定して、作成したい商品を選択して、ストアボタン(Javascript)を作成します。

作成できたストアボタンを設置したい場所に貼り付けて完了となります。

 

赤の元気 トマトケチャップ 180g赤の元気のケチャップの購入はこちら↓

 

こんな感じ….本当に購入できます。

このケチャップは、有名メーカ品に比べお高いですが、リピータも多く、たくさんの方に価値ある商品と認めて頂いています。

Yahooショップカートを外部に貼り付けてみました

ここから


食塩無添加 濃厚 トマトジュース 赤の元気 夏獲れ秋獲れ 180ml 各6本

3,720円

のし:

ここまで

ソースコードは、

<style type="text/css">
.item_pic {
width:70%;
max-width:300px;
}
.item_name {
font-size:large;
}
.item_price{
font-size:large;
}
.item_opt {
padding-bottom:5pt;
}
.opt_name {
white-space: nowrap;
}
</style>
</p>
<table class="cart" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="item_name">食塩無添加 濃厚 トマトジュース 赤の元気 夏獲れ秋獲れ 180ml 各6本</td>
</tr>
<tr>
<td>
<p><img class="item_pic" src="https://item-shopping.c.yimg.jp/i/l/hyakujyu_218253156-2" /></p>
<p class="item_price">3,720円</p>
</td>
</tr>
<tr>
<td>
<form accept-charset="EUC-JP" action="https://order.shopping.yahoo.co.jp/cgi-bin/cart-form" method="post" name="addCart"><span class="hidden"> <input name="vwcatalog" type="hidden" value="hyakujyu" /> <input name="vwitem" type="hidden" value="218253156-2" /> <input name="のし" type="hidden" value="なし" /> <input name="vwquantity" type="hidden" value="1" /> <input name=".autodone" type="hidden" value="https://www.himeport.co.jp" /> </span>
<div class="item_opt"><span class="opt_name">のし:<select name="のし" data-cart-option-select="">
<option selected="selected" value="なし" data-calcoptionprice-priceoption="0">なし</option>
<option value="内祝" data-calcoptionprice-priceoption="0">内祝</option>
<option value="御祝" data-calcoptionprice-priceoption="0">御祝</option>
<option value="お歳暮" data-calcoptionprice-priceoption="0">お歳暮</option>
<option value="寒中御見舞い" data-calcoptionprice-priceoption="0">寒中御見舞い</option>
<option value="御年賀" data-calcoptionprice-priceoption="0">御年賀</option>
<option value="お中元" data-calcoptionprice-priceoption="0">お中元</option>
<option value="暑中御見舞い" data-calcoptionprice-priceoption="0">暑中御見舞い</option>
<option value="残暑御見舞い" data-calcoptionprice-priceoption="0">残暑御見舞い</option>
<option value="御見舞" data-calcoptionprice-priceoption="0">御見舞</option>
<option value="(無地)" data-calcoptionprice-priceoption="0">(無地)</option>
</select></span></div>
<div class="pt1"><input alt="カートに入れる" src="/wp-content/uploads/2020/02/e_company_523.png" type="image" /></div>
</form>
</td>
</tr>
</tbody>
</table>

同じようなことを他のページでも紹介されているのですが、日本語オプションがあったりするとうまく動かなかったりします。

その原因は文字コード!!

カートを貼り付けるポイントだけ書くと

<form name="addCart" method="post" action="https://order.shopping.yahoo.co.jp/cgi-bin/cart-form" accept-charset="EUC-JP">
<input name="vwcatalog" type="hidden" value="サイト名(ショップurlの最後)">
<input name="vwitem" type="hidden" value="商品コード">
<input name="のし" type="hidden" value="なし" >
<input name="vwquantity" type="hidden" value="数量">
<input name=".autodone" type="hidden" value="戻り先URL">
<input type="image" src="カートボタン画像" alt="カートに入れる" border="0">
</form>

 

これを飾り付けしたり、数量やオプションを変更できるようにします。

多少の手間はかかりますが、yahooショップをお持ちであれば、ホームページに立派な無料カートが掲載できます。

 

※ 掲載時に「このカートはYahooショップカートを使用しています」とかの記載があったほうが良いかもしれません。

 

Python+wxpythonのプログラムで、buttonがアクティブにならない

Linux環境では問題なく動作していたので、Windows10でも動作するだろうと思っていたら、ボタンが表示はされているがアクティブにならない現象が発生!

しばらく悩んだ末、原因判明というか、対応策が判明!

NGだったのは

sizer_4 = wx.BoxSizer(wx.VERTICAL)
self.panel_1 = wx.Panel(self, wx.ID_ANY)
self.panel_3 = wx.Panel(self, wx.ID_ANY)
self.button_1 = wx.Button(self.panel_3, wx.ID_EXIT, "")
self.button_2 = wx.Button(self.panel_3, wx.ID_ANY, "AAAA")
self.button_3 = wx.Button(self.panel_3, wx.ID_ANY, "BBBB")

sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_2.Add(label_1, 1, wx.EXPAND, 0)
sizer_4.Add(self.button_1, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer_4.Add(self.button_2, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer_4.Add(self.button_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
self.panel_3.SetSizer(sizer_4)
sizer_2.Add(self.panel_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10)

要は、sizer4をpanel3に貼り付けて、sizer2へ

これを

sizer_2.Add(label_1, 1, wx.EXPAND, 0)
self.panel_1 = wx.Panel(self, wx.ID_ANY)
self.button_1 = wx.Button(self.panel_1, wx.ID_EXIT, "")
self.button_2 = wx.Button(self.panel_1, wx.ID_ANY, "AAAA")
self.button_3 = wx.Button(self.panel_1, wx.ID_ANY, "BBBB")

sizer_4 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_4.Add(self.button_1, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer_4.Add(self.button_2, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer_4.Add(self.button_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer_2.Add(sizer_4, 0, wx.ALIGN_RIGHT | wx.ALL, 10)

sizer4をpanel3をかいさないで、直接sizer2に貼付け

これで、無事windows10でも問題なく動作しました。もちろん、Linuxも

全体的なサイズを決めたい場合など、Panelを介したいと思いますし、ルール的には問題ないと思いますが、極力省けるパネルは入れないようにして、デザインもsizerで設定したほうが、マルチプラットフォームを考えたとき良さそうです。

ホームページやネットショップに載せるバナーや商品画像を作成

バナーや商品画像を作成したり、修正する場合、外注に出すと最低限5,000円(+消費税)程度は、必要になってしまいます。

バナーや商品画像をアドビ イラストレーターなどで作成されていると、ほぼイラストレータでしか編集できないので、ソフトウェア自体の使用費が発生する上に操作も独特で、デザイナーなどには使いやすいと言われているようですが、私個人としては、ん〜難しい!直感的でない!結局テキスト読んで勉強しないと使えない.....その上、毎月費用が発生する。

以前にも紹介したが、漫画作成でプロも使っているCLIP STUDIO PAINT PRO が、操作が直感的でマニュアルはどうしても困った時に見る程度で、機能もイラストを扱う上では十分な機能がある上にProはなんと5,000円で購入できてしまいます。CLIP STUDIO PAINT EX だとアニメーションも作成できるので、動くPOPなどもできてしまいます。

CLIP STUDIO PAINTでバナー作成

バナーのサイズを決めておけば、その上に画像レイヤーやテキストレイヤーを重ねていく感じで、背景が透過の素材を集めておけば、レイヤーの順番を変えたり、表示/非表示を切り替えることで、一度作成したバナーがいろいろなバナーに簡単に変更できます。

商品画像などは、一律の形式で作るようにしていれば、上記と同様な手順で複数の商品画像を1個のCLIPファイルにまとめて管理できます。

と、大変便利に使っているのですが、パソコンのメイン環境がほぼ完全にLinux環境に以降してしまったので、今後のどうするかを検討していました。

CLIP STUDIO PAINTがLinux上で動作すれば良いのですが、残念ながら私のwine環境ではインストールの途中で失敗してしまいました。

やむなく、Oracle Virtual BoxにWindows10をインストールして使用しています。

が、

Linuxのネイティブアプリでは、代替えできるほど使いやすいプログラムは見つけられていませんが、Linuxにインストールできてほぼ実用の範囲で使いやすいプログラムを見つけてしまいました。

Windows10でもCLIP STUDIO PAINTのライバル的扱いとなっている無料で利用できるソフトウェアです。

LinuxにインストールしたMediBang Paint Pro

ジャンプPAINTで最近注目されているようですが、MediBang Paint Pro

は、CLIP STUDIO PAINTと(ブラシの種類など機能不足もあるらしいですが、私の用途では問題ない)同様にプロの使用にも耐えうる高機能で、操作性も直感的で使いやすいです。

なにより、wineで問題なく動作しています。但し、マルチディスプレイ環境だとコマンドウインドウが別画面に表示されることもありますが、許容範囲かと思います。

そうそう、これ無料なんですよね。

無料で使ってもらって素晴らしいイラストや漫画を投稿して下さいというコンセプト

ん、漫画もかけるようになりたいので、暇を作って、投稿できるようになれればなぁ.

..と少々中二病的な爺でした。

 

ぜひ、バナー作りや商品画像作りに挑戦してみて下さい。

もちろん、弊社に作成依頼していただいても、喜んで対応させて頂きます。

お気軽にご依頼ください。

ご要望によっては勉強会的なものも対応させて頂きます。

(試し体験しながら、体で覚え頭で覚えない、頭で考える人なので、講師と一緒に実際に触って頂きながらいろいろなこと体験学習し、困ったときの解決の糸口の見つけ方を学んで、一人で試しながら使えるようになることが目標となります。時間はかかるかもしれませんが、講師の知らないことも自分の必要性に応じて自力で学べるようになって頂ければと思います。….ん〜、さらに仕事が減っちゃう_(汗))

Windows10で使うなら、これ1択

最近、pythonばかりでプログラムを書いているので、配布しやすいようにバイナリ化を検討する中で、「PyOxidizer」なるものを見つけたので試してみます。

PyOxidizerのインストール

PyOxidizerは、Rustでプログラムされているそうで、Rust 2018 (1.31 or newer)がまずはインストールされていないと駄目らしいので、インストールされているか確認する。

$ rustc --version

インストールされていれば、バージョンが表示されます。されない場合は、インストールします。

$ sudo apt install rustc

もう一度

$ rustc --version
rustc 1.36.0

問題ないようなので、PyOxidizer自身のインストールをします。

$ sudo cargo install pyoxidizer

残念ながら私の環境では、

error: failed to compile `pyoxidizer v0.3.0`,….. とエラーとなった

よく見ると、

error: failed to run custom build command for `openssl-sys v0.9.49`

opensslのコンパイルに失敗している….

$ sudo apt-get install libssl-dev

必要ライブラリーをインストールして、再び

$ sudo cargo install pyoxidizer
.......
.......
   Installed package `pyoxidizer v0.3.0` (executable `pyoxidizer`)
warning: be sure to add `/home/xxxxx/.cargo/bin` to your PATH to be able to run the installed binaries

どうやら実行ファイルのパスは手動となるようです。

/home/xxxxx/.profile (xxxxx:自分のパスね)に上記のパスを追記します。

$ vi ~/.profile 
PATH="$PATH:/home/xxxxx/.cargo/bin"
を追記
$ source ~/.profile

これでpathは通るはずなので、確認

$ pyoxidizer --version
PyOxidizer 0.3.0

ん、無事にversionが表示されたので、インストールは完了

いよいよpythonプログラムのバイナリ化の確認だけど、ちょっと時間切れ….またの機会に

 

 

宿泊施設用にIP-PBXを構築した覚書(未FIXの仮版)

システム要件は

  • 内線専用(外線は不要)
  • フロントとお帳場等同時呼び出し
  • 各客室内線
  • 従業員用内線

Ubuntu/Lubuntu 18.04 + Asterisk 16 で構築

最初にとりあえず、システムを最新状態にしておく。

必要なライブラリーを入れる。

sudo apt -y install libedit-dev libnewt-dev libssl-dev libncurses5-dev subversion libsqlite3-dev build-essential libjansson-dev libxml2-dev uuid-dev

Asteriskのソースを入手

# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
# tar zxvf asterisk-16-current.tar.gz
# cd asterisk-16.5.1

 

Asteriskのコンパイルとインストール

# sudo ./configure --with-jansson-bundled
# sudo make menuselect
# sudo make
# sudo make install
# sudo make samples
# sudo make basic-pbx
# sudo make config
# sudo make install-logrotate

「sudo make menuselect」の際にコンソールサイズが80×27以上ないと選択画面が表示されません。

Core Sound PackagesでCORE_SOUND-JA-GSM

q->sでsaveして抜けます

Asterisk設定ファイルの修正

 

  • /etc/asterisk/sip.conf
[general]
maxexpirey=3600
defaultexpirey=3600
context=default
;SIPポートは5060
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
allowguest=no
disallow=all
allow=ulaw
allow=alaw
allow=gsm
language=ja

;電話機用テンプレート(共通設定)
[phone](!)
type=friend
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1
disallow=all
allow=ulaw

;ACL
;安全措置のため192.168系以外は受け付けない
;他のネットワークを使用している場合にはここを変更すること
deny=0.0.0.0/0
permit=192.168.0.0/255.255.0.0

;各電話機毎の設定
;以下各番号ごとにパスワード設定
[201](phone)
username=201
secret=pass

[202](phone)
username=202
secret=pass

[203](phone)
username=203
secret=pass

[205](phone)
username=205
secret=pass

[206](phone)
username=206
secret=pass

[207](phone)
username=207
secret=pass

[208](phone)
username=208
secret=pass

[210](phone)
username=210
secret=pass

;以下、省略....実際にはそれどれの番号で設定が必要

 

  • /etc/asterisk/extensions.conf
[general]
writeprotect=no
priorityjumping=no

[globals]
GROUP1=SIP/270&SIP/271&SIP/272&SIP/273&SIP/275
GROUP2=SIP/281&SIP/282&SIP/283&SIP/285&SIP/286&SIP/287&SIP/288
GROUP3=SIP/201&SIP/202&SIP/203&SIP/205&SIP/206&SIP/207&SIP/208&SIP/210&
       SIP/211&SIP/212&SIP/213&SIP/215&SIP/216&SIP/217&SIP/218&SIP/220&
       SIP/221&SIP/222&SIP/223&SIP/225&SIP/226&SIP/227&SIP/228&SIP/230
;自局の着信番号を設定する
;[incoming]セクションを参照

[default]
;200番をフロントに割り当て,270/271/272/273/275をCall
;グループ着信
exten => 200,1,NoOp(フロント着信)
exten => 200,n,Dial(${GROUP1},60)
exten => 200,n,Hangup

;280番を従業員用に割り当て,281/282/283/285/286/288をCall
;グループ着信
exten => 280,1,NoOp(従業員着信)
exten => 280,n,Dial(${GROUP2},60)
exten => 280,n,Hangup

;内線呼び出し
exten => _2ZZ,1,NoOp(内線呼出)
exten => _2ZZ,n,Dial(SIP/${EXTEN},60)
exten => _2ZZ,n,Hangup

この記述はこんな感じというだけで、実際に動作確認したのは別に記述しています。

まぁ、ここは、内線だけなら、この程度という参考

Asteriskをユーザモードで動作させる

この設定をしなくても、問題なく動作します。

しかし、ほぼメンテ無しで長時間動作させる為、セキュリティを配慮してユーザモードで動作させるようにします。

sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk.asterisk /etc/asterisk
sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk.asterisk /usr/lib/asterisk

グループ、ユーザを作って、所有者などを変更と

# sudo vi /etc/default/asterisk
AST_USER="asterisk"
AST_GROUP="asterisk"

コメントアウトされているので頭の「#」を消す。

# sudo vi /etc/asterisk/asterisk.conf
runuser = asterisk
rungroup = asterisk

コメントアウトされているので頭の「;」を消す。

 

Asteriskのサービスをスタート

# sudo systemctl restart asterisk
# sudo systemctl enable asterisk

 

Oracle® VM VirtualBox® Oracle VM VirtualBoxを5.2に6.0を上書きインストールしたら、 「rtr3initex failed with rc=-1912 (rc=-1912) virtualbox」が発生して、ゲストOSが起動しなくなりました。 原因は、5.2の残骸(Kernelが残っている)があるとだめなよう
$ dpkg --list virtualbox-*
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前           バージョン   アーキテクチ 説明
+++-==============-============-============-=================================
un  virtualbox-2.0 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-2.1 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-2.2 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-3.0 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-3.1 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-3.2 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-4.0 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-4.1 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-4.2 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-4.3 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-5.0 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-5.1 <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-5.2 <なし>       <なし>       (説明 (description) がありません)
ii  virtualbox-6.0 6.0.12-13307 amd64        Oracle VM VirtualBox
ii  virtualbox-dkm 5.2.32-dfsg- all          x86 virtualization solution - ker
un  virtualbox-gue <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-gue <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-mod <なし>       <なし>       (説明 (description) がありません)
un  virtualbox-ose <なし>       <なし>       (説明 (description) がありません)
rc  virtualbox-qt  5.2.32-dfsg- amd64        x86 virtualization solution - Qt 
un  virtualbox-sou <なし>       <なし>       (説明 (description) がありません)
この5.2の残骸を削除します。
$ sudo apt-get autoremove --purge virtualbox-5.2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
パッケージ 'virtualbox-5.2' はインストールされていないため削除もされません
以下のパッケージは「削除」されます:
  dkms* libgsoap-2.8.60* libvncserver1* virtualbox-dkms*
アップグレード: 0 個、新規インストール: 0 個、削除: 4 個、保留: 4 個。
この操作後に 7,583 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 377057 個のファイルとディレクトリがインストールされています。)
virtualbox-dkms (5.2.32-dfsg-0~ubuntu18.04.1) を削除しています ...

-------- Uninstall Beginning --------
Module:  virtualbox
Version: 5.2.32
Kernel:  4.15.0-62-generic (x86_64)
-------------------------------------
(以下省略)
で、仕上げ
$ sudo /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
これでバッチリ起動しました。

Linux環境で作成したPythonプログラムが、Windows環境ではout of range

マルチプラットホーム対応で、Webアプリへの転用もできるので、主にPythonでプログラムの作成をしていますが、仕事PCのメインOSをLinuxに移行した関係でプログラム作成、確認も必然的にLinux環境が主となってしまいます。

しかし、お客様の環境は、殆どがWindows7/10ですので、Windows環境で動作することが必要となります。

ところが、残念ながら、pythonで作成したプログラムが、Linux上では問題ないのにWindows上ではエラーを吐いたり、画面表示やライブラリーの動作が異なることが多々あります。

その1つが、「Out of Range」

ファイルの読み書きをする場合に起きやすいエラーですが、CSVファイルの扱いに関しては、以下の盛り込むことで、ファイルの読み書きに関しては対策できます。

書き込み時、
withopen(data_file, 'w', newline='', encoding='utf-8') as fo:
    writer = csv.writer(fo)
    writer.writerows( myFile )
 
読み出し時、
withopen(data_file, 'r', newline='', encoding='utf-8') as fi:
    reader = csv.reader(fi)
    myFile = [row for row in reader]

out of Rangeの要因は、改行の扱いで、「newline=”」を指定することで余分な改行が回避されて正常に読み書きできるようになります。

また、プラットフォームの違いによりエンコードでエラーとなることも多々ありますので、明示的に「encoding=’utf-8’」コード指定しておきます。

その他、ファイルがないのにファイルOpen すると当然エラーなりますので、以下でファイルの有無の判定をします。
if os.path.exists(data_file):
   with open(data_file, 'r', newline='', encoding='utf-8') as fi:
            reader = csv.reader(fi)
            myFile = [row for row in reader]

ファイルがない場合に新規にファイルを作りたい場合は、

if not os.path.exists(data_file):
     with open(data_file, 'w', newline='', encoding='utf-8') as fo:
          writer = csv.writer(fo)
          writer.writerows(myFile)

補足:

data_fileは、パスを含めたファイル名を指定します。

myFileは、読み書きするデータとなります。csv」の場合リストとなります。

wx.ColourDatabaseのサンプル色表示プログラム

Pythonで、少々本格的?な業務アプリケーションを作成するのに色サンプルがほしかったので、簡単なプログラムを作成してみました。

ただ、色見本を表示するだけのプログラムです。

骨組みをwxGladeで作って、Visual Studio Codeで修正して作成しています。

本来は、コピー・ペースト機能も欲しいところですが、まぁ今回は色見本なので…..(-_-;)

やっぱり、できると実用的なので、盛り込みました。

表示の色名を

wxColour("CADET BLUE")

といった感じで使用します。

 

修正版:

マウス右ダブルクリックで該当色を”(r, g, b)”でクリップボードにコピーするように少しコードを追記しました。
“[r,g,b]”の方が使いやすい場合は、(こっちのほうが使いやすいかもしれません。)
 
self.clickcolor = r, g , b
pyperclip.copy(str(self.clickcolor))
 
の所を以下に書き換えます。
 
pyperclip.copy(str([r,g,b]))
 
事前に「pyperclip」をインストールしておく必要があります。
sudo pip3 install pyperclip
(Windows10の場合は、sudoは不要)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# generated by wxGlade 0.9.2 on Thu Mar 21 10:05:00 2019
#
# マウス右ダブルクリックで該当色を”(r, g, b)”でクリップボードにコピー

import wx
import pyperclip

# begin wxGlade: dependencies
# end wxGlade

# begin wxGlade: extracode
# end wxGlade


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((900, 800))

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("wx.ColourDatabase")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_6 = wx.BoxSizer(wx.VERTICAL)
        sizer_5 = wx.BoxSizer(wx.VERTICAL)
        sizer_4 = wx.BoxSizer(wx.VERTICAL)
        sizer_3 = wx.BoxSizer(wx.VERTICAL)
        label_69 = wx.StaticText(self, wx.ID_ANY, "  ** マウス右ダブルクリックで該当色(r, g, b)をクリップボードにコピー **")
        sizer_1.Add(label_69, 0, wx.ALL | wx.EXPAND, 1)
        label_70 = wx.StaticText(
            self, wx.ID_ANY, "AQUAMARINE", style=wx.ALIGN_CENTER)
        label_70.SetBackgroundColour(wx.Colour("AQUAMARINE"))
        label_70.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_70, 0, wx.ALL | wx.EXPAND, 1)
        label_2 = wx.StaticText(
            self, wx.ID_ANY, "BLACK", style=wx.ALIGN_CENTER)
        label_2.SetBackgroundColour(wx.Colour("BLACK"))
        label_2.SetForegroundColour(wx.Colour(255, 255, 255))
        sizer_3.Add(label_2, 0, wx.ALL | wx.EXPAND, 1)
        label_71 = wx.StaticText(
            self, wx.ID_ANY, "BLUE", style=wx.ALIGN_CENTER)
        label_71.SetBackgroundColour(wx.Colour("BLUE"))
        label_71.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_71, 0, wx.ALL | wx.EXPAND, 1)
        label_72 = wx.StaticText(
            self, wx.ID_ANY, "BLUE VIOLET", style=wx.ALIGN_CENTER)
        label_72.SetBackgroundColour(wx.Colour("BLUE VIOLET"))
        label_72.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_72, 0, wx.ALL | wx.EXPAND, 1)
        label_73 = wx.StaticText(
            self, wx.ID_ANY, "BROWN", style=wx.ALIGN_CENTER)
        label_73.SetBackgroundColour(wx.Colour("BROWN"))
        label_73.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_73, 0, wx.ALL | wx.EXPAND, 1)
        label_74 = wx.StaticText(
            self, wx.ID_ANY, "CADET BLUE", style=wx.ALIGN_CENTER)
        label_74.SetBackgroundColour(wx.Colour("CADET BLUE"))
        label_74.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_74, 0, wx.ALL | wx.EXPAND, 1)
        label_75 = wx.StaticText(
            self, wx.ID_ANY, "CORAL", style=wx.ALIGN_CENTER)
        label_75.SetBackgroundColour(wx.Colour("CORAL"))
        label_75.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_75, 0, wx.ALL | wx.EXPAND, 1)
        label_76 = wx.StaticText(
            self, wx.ID_ANY, "CORNFLOWER BLUE", style=wx.ALIGN_CENTER)
        label_76.SetBackgroundColour(wx.Colour("CORNFLOWER BLUE"))
        label_76.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_76, 0, wx.ALL | wx.EXPAND, 1)
        label_77 = wx.StaticText(
            self, wx.ID_ANY, "CYAN", style=wx.ALIGN_CENTER)
        label_77.SetBackgroundColour(wx.Colour("CYAN"))
        label_77.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_77, 0, wx.ALL | wx.EXPAND, 1)
        label_78 = wx.StaticText(
            self, wx.ID_ANY, "DARK GREY", style=wx.ALIGN_CENTER)
        label_78.SetBackgroundColour(wx.Colour("DARK GREY"))
        label_78.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_78, 0, wx.ALL | wx.EXPAND, 1)
        label_79 = wx.StaticText(
            self, wx.ID_ANY, "DARK GREEN", style=wx.ALIGN_CENTER)
        label_79.SetBackgroundColour(wx.Colour("DARK GREEN"))
        label_79.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_79, 0, wx.ALL | wx.EXPAND, 1)
        label_80 = wx.StaticText(
            self, wx.ID_ANY, "DARK OLIVE GREEN", style=wx.ALIGN_CENTER)
        label_80.SetBackgroundColour(wx.Colour("DARK OLIVE GREEN"))
        label_80.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_80, 0, wx.ALL | wx.EXPAND, 1)
        label_81 = wx.StaticText(
            self, wx.ID_ANY, "DARK ORCHID", style=wx.ALIGN_CENTER)
        label_81.SetBackgroundColour(wx.Colour("DARK ORCHID"))
        label_81.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_81, 0, wx.ALL | wx.EXPAND, 1)
        label_82 = wx.StaticText(
            self, wx.ID_ANY, "DARK SLATE BLUE", style=wx.ALIGN_CENTER)
        label_82.SetBackgroundColour(wx.Colour("DARK SLATE BLUE"))
        label_82.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_82, 0, wx.ALL | wx.EXPAND, 1)
        label_83 = wx.StaticText(
            self, wx.ID_ANY, "DARK SLATE GREY", style=wx.ALIGN_CENTER)
        label_83.SetBackgroundColour(wx.Colour("DARK SLATE GREY"))
        label_83.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_83, 0, wx.ALL | wx.EXPAND, 1)
        label_84 = wx.StaticText(
            self, wx.ID_ANY, "DARK TURQUOISE", style=wx.ALIGN_CENTER)
        label_84.SetBackgroundColour(wx.Colour("DARK TURQUOISE"))
        label_84.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_84, 0, wx.ALL | wx.EXPAND, 1)
        label_85 = wx.StaticText(
            self, wx.ID_ANY, "DIM GREY", style=wx.ALIGN_CENTER)
        label_85.SetBackgroundColour(wx.Colour("DIM GREY"))
        label_85.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_85, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
        label_86 = wx.StaticText(
            self, wx.ID_ANY, "FIREBRICK", style=wx.ALIGN_CENTER)
        label_86.SetBackgroundColour(wx.Colour("FIREBRICK"))
        label_86.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_86, 0, wx.ALL | wx.EXPAND, 1)
        label_102 = wx.StaticText(
            self, wx.ID_ANY, "FOREST GREEN", style=wx.ALIGN_CENTER)
        label_102.SetBackgroundColour(wx.Colour("FOREST GREEN"))
        label_102.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_102, 0, wx.ALL | wx.EXPAND, 1)
        label_87 = wx.StaticText(
            self, wx.ID_ANY, "GOLD", style=wx.ALIGN_CENTER)
        label_87.SetBackgroundColour(wx.Colour("GOLD"))
        label_87.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_87, 0, wx.ALL | wx.EXPAND, 1)
        label_88 = wx.StaticText(
            self, wx.ID_ANY, "GOLDENROD", style=wx.ALIGN_CENTER)
        label_88.SetBackgroundColour(wx.Colour("GOLDENROD"))
        label_88.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_88, 0, wx.ALL | wx.EXPAND, 1)
        label_89 = wx.StaticText(
            self, wx.ID_ANY, "GREY", style=wx.ALIGN_CENTER)
        label_89.SetBackgroundColour(wx.Colour("GREY"))
        label_89.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_89, 0, wx.ALL | wx.EXPAND, 1)
        label_90 = wx.StaticText(
            self, wx.ID_ANY, "GREEN", style=wx.ALIGN_CENTER)
        label_90.SetBackgroundColour(wx.Colour("GREEN"))
        label_90.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_90, 0, wx.ALL | wx.EXPAND, 1)
        label_91 = wx.StaticText(
            self, wx.ID_ANY, "GREEN YELLOW", style=wx.ALIGN_CENTER)
        label_91.SetBackgroundColour(wx.Colour("GREEN YELLOW"))
        label_91.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_91, 0, wx.ALL | wx.EXPAND, 1)
        label_92 = wx.StaticText(
            self, wx.ID_ANY, "INDIAN RED", style=wx.ALIGN_CENTER)
        label_92.SetBackgroundColour(wx.Colour("INDIAN RED"))
        label_92.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_92, 0, wx.ALL | wx.EXPAND, 1)
        label_93 = wx.StaticText(
            self, wx.ID_ANY, "KHAKI", style=wx.ALIGN_CENTER)
        label_93.SetBackgroundColour(wx.Colour("KHAKI"))
        label_93.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_93, 0, wx.ALL | wx.EXPAND, 1)
        label_94 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT BLUE", style=wx.ALIGN_CENTER)
        label_94.SetBackgroundColour(wx.Colour("LIGHT BLUE"))
        label_94.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_94, 0, wx.ALL | wx.EXPAND, 1)
        label_95 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT GREY", style=wx.ALIGN_CENTER)
        label_95.SetBackgroundColour(wx.Colour("LIGHT GREY"))
        label_95.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_95, 0, wx.ALL | wx.EXPAND, 1)
        label_96 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT STEEL BLUE", style=wx.ALIGN_CENTER)
        label_96.SetBackgroundColour(wx.Colour("LIGHT STEEL BLUE"))
        label_96.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_96, 0, wx.ALL | wx.EXPAND, 1)
        label_97 = wx.StaticText(
            self, wx.ID_ANY, "LIME GREEN", style=wx.ALIGN_CENTER)
        label_97.SetBackgroundColour(wx.Colour("LIME GREEN"))
        label_97.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_97, 0, wx.ALL | wx.EXPAND, 1)
        label_98 = wx.StaticText(
            self, wx.ID_ANY, "MAGENTA", style=wx.ALIGN_CENTER)
        label_98.SetBackgroundColour(wx.Colour("MAGENTA"))
        label_98.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_98, 0, wx.ALL | wx.EXPAND, 1)
        label_99 = wx.StaticText(
            self, wx.ID_ANY, "MAROON", style=wx.ALIGN_CENTER)
        label_99.SetBackgroundColour(wx.Colour("MAROON"))
        label_99.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_99, 0, wx.ALL | wx.EXPAND, 1)
        label_100 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM AQUAMARINE", style=wx.ALIGN_CENTER)
        label_100.SetBackgroundColour(wx.Colour("MEDIUM AQUAMARINE"))
        label_100.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_100, 0, wx.ALL | wx.EXPAND, 1)
        label_101 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM BLUE", style=wx.ALIGN_CENTER)
        label_101.SetBackgroundColour(wx.Colour("MEDIUM BLUE"))
        label_101.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_101, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_4, 1, wx.EXPAND, 0)
        label_103 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM FOREST GREEN", style=wx.ALIGN_CENTER)
        label_103.SetBackgroundColour(wx.Colour("MEDIUM FOREST GREEN"))
        label_103.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_103, 0, wx.ALL | wx.EXPAND, 1)
        label_104 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM GOLDENROD", style=wx.ALIGN_CENTER)
        label_104.SetBackgroundColour(wx.Colour("MEDIUM GOLDENROD"))
        label_104.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_104, 0, wx.ALL | wx.EXPAND, 1)
        label_105 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM ORCHID", style=wx.ALIGN_CENTER)
        label_105.SetBackgroundColour(wx.Colour("MEDIUM ORCHID"))
        label_105.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_105, 0, wx.ALL | wx.EXPAND, 1)
        label_106 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SEA GREEN", style=wx.ALIGN_CENTER)
        label_106.SetBackgroundColour(wx.Colour("MEDIUM SEA GREEN"))
        label_106.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_106, 0, wx.ALL | wx.EXPAND, 1)
        label_107 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SLATE BLUE", style=wx.ALIGN_CENTER)
        label_107.SetBackgroundColour(wx.Colour("MEDIUM SLATE BLUE"))
        label_107.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_107, 0, wx.ALL | wx.EXPAND, 1)
        label_108 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SPRING GREEN", style=wx.ALIGN_CENTER)
        label_108.SetBackgroundColour(wx.Colour("MEDIUM SPRING GREEN"))
        label_108.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_108, 0, wx.ALL | wx.EXPAND, 1)
        label_109 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM TURQUOISE", style=wx.ALIGN_CENTER)
        label_109.SetBackgroundColour(wx.Colour("MEDIUM TURQUOISE"))
        label_109.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_109, 0, wx.ALL | wx.EXPAND, 1)
        label_110 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM VIOLET RED", style=wx.ALIGN_CENTER)
        label_110.SetBackgroundColour(wx.Colour("MEDIUM VIOLET RED"))
        label_110.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_110, 0, wx.ALL | wx.EXPAND, 1)
        label_111 = wx.StaticText(
            self, wx.ID_ANY, "MIDNIGHT BLUE", style=wx.ALIGN_CENTER)
        label_111.SetBackgroundColour(wx.Colour("MIDNIGHT BLUE"))
        label_111.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_111, 0, wx.ALL | wx.EXPAND, 1)
        label_112 = wx.StaticText(
            self, wx.ID_ANY, "NAVY", style=wx.ALIGN_CENTER)
        label_112.SetBackgroundColour(wx.Colour("NAVY"))
        label_112.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_112, 0, wx.ALL | wx.EXPAND, 1)
        label_113 = wx.StaticText(
            self, wx.ID_ANY, "ORANGE", style=wx.ALIGN_CENTER)
        label_113.SetBackgroundColour(wx.Colour("ORANGE"))
        label_113.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_113, 0, wx.ALL | wx.EXPAND, 1)
        label_114 = wx.StaticText(
            self, wx.ID_ANY, "ORANGE RED", style=wx.ALIGN_CENTER)
        label_114.SetBackgroundColour(wx.Colour("ORANGE RED"))
        label_114.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_114, 0, wx.ALL | wx.EXPAND, 1)
        label_115 = wx.StaticText(
            self, wx.ID_ANY, "ORCHID", style=wx.ALIGN_CENTER)
        label_115.SetBackgroundColour(wx.Colour("ORCHID"))
        label_115.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_115, 0, wx.ALL | wx.EXPAND, 1)
        label_116 = wx.StaticText(
            self, wx.ID_ANY, "PALE GREEN", style=wx.ALIGN_CENTER)
        label_116.SetBackgroundColour(wx.Colour("PALE GREEN"))
        label_116.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_116, 0, wx.ALL | wx.EXPAND, 1)
        label_117 = wx.StaticText(
            self, wx.ID_ANY, "PINK", style=wx.ALIGN_CENTER)
        label_117.SetBackgroundColour(wx.Colour("PINK"))
        label_117.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_117, 0, wx.ALL | wx.EXPAND, 1)
        label_118 = wx.StaticText(
            self, wx.ID_ANY, "PLUM", style=wx.ALIGN_CENTER)
        label_118.SetBackgroundColour(wx.Colour("PLUM"))
        label_118.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_118, 0, wx.ALL | wx.EXPAND, 1)
        label_119 = wx.StaticText(
            self, wx.ID_ANY, "PURPLE", style=wx.ALIGN_CENTER)
        label_119.SetBackgroundColour(wx.Colour("PURPLE"))
        label_119.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_119, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_5, 1, wx.EXPAND, 0)
        label_120 = wx.StaticText(
            self, wx.ID_ANY, "RED", style=wx.ALIGN_CENTER)
        label_120.SetBackgroundColour(wx.Colour("RED"))
        label_120.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_120, 0, wx.ALL | wx.EXPAND, 1)
        label_121 = wx.StaticText(
            self, wx.ID_ANY, "SALMON", style=wx.ALIGN_CENTER)
        label_121.SetBackgroundColour(wx.Colour("SALMON"))
        label_121.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_121, 0, wx.ALL | wx.EXPAND, 1)
        label_122 = wx.StaticText(
            self, wx.ID_ANY, "SEA GREEN", style=wx.ALIGN_CENTER)
        label_122.SetBackgroundColour(wx.Colour("SEA GREEN"))
        label_122.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_122, 0, wx.ALL | wx.EXPAND, 1)
        label_123 = wx.StaticText(
            self, wx.ID_ANY, "SIENNA", style=wx.ALIGN_CENTER)
        label_123.SetBackgroundColour(wx.Colour("SIENNA"))
        label_123.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_123, 0, wx.ALL | wx.EXPAND, 1)
        label_124 = wx.StaticText(
            self, wx.ID_ANY, "SKY BLUE", style=wx.ALIGN_CENTER)
        label_124.SetBackgroundColour(wx.Colour("SKY BLUE"))
        label_124.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_124, 0, wx.ALL | wx.EXPAND, 1)
        label_125 = wx.StaticText(
            self, wx.ID_ANY, "SLATE BLUE", style=wx.ALIGN_CENTER)
        label_125.SetBackgroundColour(wx.Colour("SLATE BLUE"))
        label_125.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_125, 0, wx.ALL | wx.EXPAND, 1)
        label_126 = wx.StaticText(
            self, wx.ID_ANY, "SPRING GREEN", style=wx.ALIGN_CENTER)
        label_126.SetBackgroundColour(wx.Colour("SPRING GREEN"))
        label_126.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_126, 0, wx.ALL | wx.EXPAND, 1)
        label_127 = wx.StaticText(
            self, wx.ID_ANY, "STEEL BLUE", style=wx.ALIGN_CENTER)
        label_127.SetBackgroundColour(wx.Colour("STEEL BLUE"))
        label_127.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_127, 0, wx.ALL | wx.EXPAND, 1)
        label_128 = wx.StaticText(
            self, wx.ID_ANY, "TAN", style=wx.ALIGN_CENTER)
        label_128.SetBackgroundColour(wx.Colour("TAN"))
        label_128.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_128, 0, wx.ALL | wx.EXPAND, 1)
        label_129 = wx.StaticText(
            self, wx.ID_ANY, "THISTLE", style=wx.ALIGN_CENTER)
        label_129.SetBackgroundColour(wx.Colour("THISTLE"))
        label_129.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_129, 0, wx.ALL | wx.EXPAND, 1)
        label_130 = wx.StaticText(
            self, wx.ID_ANY, "TURQUOISE", style=wx.ALIGN_CENTER)
        label_130.SetBackgroundColour(wx.Colour("TURQUOISE"))
        label_130.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_130, 0, wx.ALL | wx.EXPAND, 1)
        label_131 = wx.StaticText(
            self, wx.ID_ANY, "VIOLET", style=wx.ALIGN_CENTER)
        label_131.SetBackgroundColour(wx.Colour("VIOLET"))
        label_131.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_131, 0, wx.ALL | wx.EXPAND, 1)
        label_132 = wx.StaticText(
            self, wx.ID_ANY, "VIOLET RED", style=wx.ALIGN_CENTER)
        label_132.SetBackgroundColour(wx.Colour("VIOLET RED"))
        label_132.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_132, 0, wx.ALL | wx.EXPAND, 1)
        label_133 = wx.StaticText(
            self, wx.ID_ANY, "WHEAT", style=wx.ALIGN_CENTER)
        label_133.SetBackgroundColour(wx.Colour("WHEAT"))
        label_133.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_133, 0, wx.ALL | wx.EXPAND, 1)
        label_134 = wx.StaticText(
            self, wx.ID_ANY, "WHITE", style=wx.ALIGN_CENTER)
        label_134.SetBackgroundColour(wx.Colour("WHITE"))
        label_134.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_134, 0, wx.ALL | wx.EXPAND, 1)
        label_135 = wx.StaticText(
            self, wx.ID_ANY, "YELLOW", style=wx.ALIGN_CENTER)
        label_135.SetBackgroundColour(wx.Colour("YELLOW"))
        label_135.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_135, 0, wx.ALL | wx.EXPAND, 1)
        label_136 = wx.StaticText(
            self, wx.ID_ANY, "YELLOW GREEN", style=wx.ALIGN_CENTER)
        label_136.SetBackgroundColour(wx.Colour("YELLOW GREEN"))
        label_136.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_136, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_6, 1, wx.EXPAND, 0)
        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade

        label_2.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_70.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_71.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_72.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_73.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_74.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_75.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_76.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_77.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_78.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_79.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_80.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_81.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_82.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_83.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_84.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_85.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_86.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_87.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_88.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_89.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_90.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_91.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_92.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_93.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_94.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_95.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_96.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_97.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_98.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_99.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_100.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_101.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_102.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_103.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_104.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_105.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_106.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_107.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_108.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_109.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_110.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_111.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_112.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_113.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_114.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_115.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_116.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_117.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_118.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_119.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_120.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_121.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_122.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_123.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_124.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_125.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_126.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_127.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_128.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_129.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_130.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_131.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_132.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_133.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_134.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_135.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_136.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)

    def Clicpcolorcode(self, event): 
        get_object = event.GetEventObject() 
        [r,g,b,a]=get_object.GetBackgroundColour()
        self.clickcolor = r, g , b
        pyperclip.copy(str(self.clickcolor))

# end of class MyFrame


class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

# end of class MyApp


if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

このソースを「ColourDatabase.py」とでもして保存して

python3 ColourDatabase.py

ちなみに事前にwxpythonをインストールしておく必要があります。(pyperclipも)

おまけ

event処理なので、色の取得がしたい場合は、

get_object = event.GetEventObject()
[r,g,b,a]=get_object.GetBackgroundColour()
 
で、r,g,bを適当に編集して、以下のようにすると色が変えられます。
 
get_object.SetBackgroundColour([r,g,b])
 
もちろん、直接式を挿入してもOK
 
get_object.SetBackgroundColour([r-10,g-10,b-10])
xxxxxなんか処理して、色を戻す
get_object.SetBackgroundColour([r+10,g+10,b+10])
 
こんな形で元の色を気にしないで、一時的に色を変えることもできます。