pythonでfoobarのalternativeを作る 10 version 5

2019/05/18 10:32 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
自分のPCの音楽ファイルをタグでデータベース化 10
https://www.tutorialspoint.com/wxpython/wxpython_listbox_listctrl_class.htm
```
import sys 
import wx  

players = [('Tendulkar', '15000', '100'), ('Dravid', '14000', '1'), 
   ('Kumble', '1000', '700'), ('KapilDev', '5000', '400'), 
   ('Ganguly', '8000', '50')] 
	
class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title) 
		
      panel = wx.Panel(self) 
      box = wx.BoxSizer(wx.HORIZONTAL)
		
      self.list = wx.ListCtrl(panel, -1, style = wx.LC_REPORT) 
      self.list.InsertColumn(0, 'name', width = 100) 
      self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100) 
      self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100) 
         
      for i in players: 
         index = self.list.InsertStringItem(sys.maxint, i[0]) 
         self.list.SetStringItem(index, 1, i[1]) 
         self.list.SetStringItem(index, 2, i[2]) 
			
      box.Add(self.list,1,wx.EXPAND) 
      panel.SetSizer(box) 
      panel.Fit() 
      self.Centre() 
         
      self.Show(True)  
     
ex = wx.App() 
Mywin(None,'ListCtrl Demo') 
ex.MainLoop()
```


カラムの設定はわかるけどデータの挿入の仕方がよくわかんない
こっちの方がわかりやすいかな
https://python-minutes.blogspot.com/2017/06/pythongui-listctrl.html
>行の追加はまず
>  insertitem
>このときに1列目の値も設定する
>2列目以降の値を設定するときは
>  SetItem
>とする
>方法は他にもあるらしい

ここも良いわ
https://bty.sakura.ne.jp/wp/archives/42

以上は削除かな

-------------
190517の開発
- select文の戻り値について、最初の要素しか出力できなかったので書換えた。タプルを一行の文字列にするのって面倒なんだなあ。簡単に書けないんだろうか
今回は文字列にNoneが混じってるのでさらに面倒
```
       for l in c.execute(line):
            s=''
            for ss in l:
                if ss==None:
                    ss='None'
                s += ss+'|'
            self.m_listBox1.Append(s)
        c.close()
        conn.close()
```
- そう考えると`print`はすごく使いやすい
で、`print`の出力をそっくり文字列として取得できないか調べた
方法としてはあったけど結構面倒
簡単に出来ないものかね

```
import sys
import io

with io.StringIO() as f:    # 文字列IOストリームを初期化して、f に代入
    sys.stdout = f          # 標準出力を f に切り替える。
    for num in range(5):    # fに切り替わった標準出力に対してrange(5)の要素を、printで出力
        print(num)
    text = f.getvalue()     # f に出力されたものを文字列として取得
    sys.stdout = sys.__stdout__    # 標準出力をデフォルトに戻して text を表示
    print("START\n" + text + "END")
```
- でもやっぱりテキストコントロールに区切り文字で出力すると見ずらい
リストを使ったほうがいいよなあ
      

https://www.tutorialspoint.com/wxpython/wxpython_listbox_listctrl_class.htm

import sys 
import wx  

players = [('Tendulkar', '15000', '100'), ('Dravid', '14000', '1'), 
   ('Kumble', '1000', '700'), ('KapilDev', '5000', '400'), 
   ('Ganguly', '8000', '50')] 
	
class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title) 
		
      panel = wx.Panel(self) 
      box = wx.BoxSizer(wx.HORIZONTAL)
		
      self.list = wx.ListCtrl(panel, -1, style = wx.LC_REPORT) 
      self.list.InsertColumn(0, 'name', width = 100) 
      self.list.InsertColumn(1, 'runs', wx.LIST_FORMAT_RIGHT, 100) 
      self.list.InsertColumn(2, 'wkts', wx.LIST_FORMAT_RIGHT, 100) 
         
      for i in players: 
         index = self.list.InsertStringItem(sys.maxint, i[0]) 
         self.list.SetStringItem(index, 1, i[1]) 
         self.list.SetStringItem(index, 2, i[2]) 
			
      box.Add(self.list,1,wx.EXPAND) 
      panel.SetSizer(box) 
      panel.Fit() 
      self.Centre() 
         
      self.Show(True)  
     
ex = wx.App() 
Mywin(None,'ListCtrl Demo') 
ex.MainLoop()

カラムの設定はわかるけどデータの挿入の仕方がよくわかんない
こっちの方がわかりやすいかな
https://python-minutes.blogspot.com/2017/06/pythongui-listctrl.html

行の追加はまず
insertitem
このときに1列目の値も設定する
2列目以降の値を設定するときは
SetItem
とする
方法は他にもあるらしい

ここも良いわ
https://bty.sakura.ne.jp/wp/archives/42

以上は削除かな


190517の開発

  • select文の戻り値について、最初の要素しか出力できなかったので書換えた。タプルを一行の文字列にするのって面倒なんだなあ。簡単に書けないんだろうか
    今回は文字列にNoneが混じってるのでさらに面倒
       for l in c.execute(line):
            s=''
            for ss in l:
                if ss==None:
                    ss='None'
                s += ss+'|'
            self.m_listBox1.Append(s)
        c.close()
        conn.close()
  • そう考えるとprintはすごく使いやすい
    で、printの出力をそっくり文字列として取得できないか調べた
    方法としてはあったけど結構面倒
    簡単に出来ないものかね
import sys
import io

with io.StringIO() as f:    # 文字列IOストリームを初期化して、f に代入
    sys.stdout = f          # 標準出力を f に切り替える。
    for num in range(5):    # fに切り替わった標準出力に対してrange(5)の要素を、printで出力
        print(num)
    text = f.getvalue()     # f に出力されたものを文字列として取得
    sys.stdout = sys.__stdout__    # 標準出力をデフォルトに戻して text を表示
    print("START\n" + text + "END")
  • でもやっぱりテキストコントロールに区切り文字で出力すると見ずらい
    リストを使ったほうがいいよなあ