前回pythonからchromeを実行してツイッターにログインするところまでやりました。
ログインするだけではpythonでする必要もないので今度はツイッターをpythonで操作することにします。その為の準備としてGUIでボタンやラベルなどを表示するウィンドウを作成します。
★やりたいこと
- 自動ログイン
- 自動フォローとアンフォロー
- 自動ツイート
上記3点をpythonでやりたいと思います。この機能を設定するウィンドウを作成します。
① プログラム(ウィンドウ表示)
まずはウィンドウを表示します。
1 2 3 4 5 6 7 8 9 10 |
#ウィンドウを作る import tkinter #ウィンドウ用オブジェクト作成 win = tkinter.Tk() win.title("ツイッター自動実行ツール") win.geometry("255x415"+100+10) #リサイズ不可 win.resizable(0,0) win.mainloop() |
これがないとGUI出来ません。
後は
「win.titele」でウィンドウのタイトル
「wind.geometry」でウインドウのサイズ(255×415)と表示位置(+100+10)
ウィンドウのサイズ変更する必要もないし、させたくないので「win.resizable(0,0)」でサイズ変更の指定します。
「win.mainloop()」でウィンドウを表示します。
ハイ、これでウィンドウの表示はOK!!
次にボタンやラベルをウィンドウに配置します。
② プログラム(ラベル表示)
ウィンドウ内にラベルやボタン等を配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#フォント font1 = font.Font(family='MSP ゴシック', size=9) #ラベルID label1 = tkinter.Label(win, text="ログインID", font=font1) label1.place(x=15,y=20) #ログインID入力BOX editbox_id = tkinter.Entry(width=25) editbox_id.insert(tkinter.END,"ログインID") editbox_id.place(x=95,y=20) #ラベルパスワード label2 = tkinter.Label(win, text="パスワード", font=font1) label2.place(x=15,y=50) #パスワード入力BOX editbox_pass = tkinter.Entry(width=25, show='*') editbox_pass.insert(tkinter.END,"パスワード") editbox_pass.place(x=95,y=50) #チェックボックス自動フォロー valfolow = tkinter.BooleanVar() valfolow.set(True) checkBox_folow = tkinter.Checkbutton(text=u"自動フォローする", variable=valfolow) checkBox_folow.place(x=15,y=80) #チェックボックス自動アンフォロー valunfolow = tkinter.BooleanVar() valunfolow.set(False) checkBox_unfolow = tkinter.Checkbutton(text=u"自動アンフォローする", variable=valunfolow) checkBox_unfolow.place(x=15,y=110) #ラベル検索 label2 = tkinter.Label(win, text="検索キーワード", font=font1) label2.place(x=15,y=145) label3 = tkinter.Label(win, text="※キーワード間は「 」で区切る", font=font1) label3.place(x=15,y=170) #検索キーワード入力BOX editbox_word = tkinter.Entry(width=38) editbox_word.insert(tkinter.END,"プログラム python") editbox_word.place(x=15,y=200) #チェックボックス自動ツイート valautotweet = tkinter.BooleanVar() valautotweet.set(False) checkBox_tweet = tkinter.Checkbutton(text=u"自動ツイートする", variable=valautotweet) checkBox_tweet.place(x=15,y=235) #ラベルファイル名 label4 = tkinter.Label(win, text="ツイートファイル", font=font1) label4.place(x=15,y=265) #ファイル名入力BOX editbox_file = tkinter.Entry(width=28) editbox_file.insert(tkinter.END,"c:\ツイート.txt") editbox_file.place(x=15,y=285) #ボタン button_file = tkinter.Button(text=u'...', width=5) button_file.place(x=200,y=285) #ラベルツイート間隔 label5 = tkinter.Label(win, text="ツイート間隔", font=font1) label5.place(x=15,y=320) #スピンボックス intval = (30, 60, 90, 120, 150, 180) spin_interval = tkinter.Spinbox(win, value = intval, width = 10) spin_interval.place(x=15,y=345) #ラベルツイート間隔単位 label6 = tkinter.Label(win, text="分", font=font1) label6.place(x=90,y=345) #チェックボックスランダムツイート valrndtweet = tkinter.BooleanVar() valrndtweet.set(False) checkBox_rndtweet = tkinter.Checkbutton(text=u"ランダムツイートする", variable=valrndtweet) checkBox_rndtweet.place(x=115,y=345) #実行ボタン button_run = tkinter.Button(text=u'実行', width=8) button_run.place(x=115,y=375) #終了ボタン button_end = tkinter.Button(text=u'終了', width=8) button_end.place(x=180,y=375) root.mainloop() |
今回はそのうち以下のものを使用します。
ラベル | Label | 各種文言を表示 |
テキストボックス | Entry | IDやパスなどのテキスト入力 |
チェックボックス | Checkbutton | フォロー、アンフォーローの選択肢 |
スピンボックス | Spinbox | ツイート間隔の時間選択 |
ボタン | Button | 実行、終了ボタン |
各ウィジェットを作成したウィンドウ内に配置していきます。
共通として配置には「place」を使用します。
1 2 3 |
#ラベルID label1 = tkinter.Label(win, text="ログインID", font=font1) label1.place(x=15,y=20) |
このようにplace(X=**,y=**)と指定することでウィンドウ内の座標位置にウィジェットを配置します。
基本はそれぞれのクラスオブジェクトを作成して、placeで配置していく感じになります。
他人に見られたくないパスワード入力と1分単位で指定する意味があまりなさそうな自動ツイート間隔の部分はちょっと手を加えます。
●パスワード入力用テキストボックス
1 2 3 4 |
#パスワード入力BOX editbox_pass = tkinter.Entry(width=25, show='*') editbox_pass.insert(tkinter.END,"パスワード") editbox_pass.place(x=95,y=50) |
多くのパスワード入力のテキストボックスは文字が「*」となっています。同様に表示させるために「show=’*’」と指定することで実現します。
●自動ツイート間隔選択スピンボックス
1 2 3 4 |
#スピンボックス intval = (30, 60, 90, 120, 150, 180) spin_interval = tkinter.Spinbox(win, value = intval, width = 10) spin_interval.place(x=15,y=345) |
大体30分刻みで選択する感じにして30から180まで選択可能にします。他の時間を指定する場合は直接入力するようにします。
1 |
intval = (30, 60, 90, 120, 150, 180) |
「interval」という変数に値を設定し、「spinbox」の「value」に設定することで変数の値のみが選択可能になります。
●自動フォローチェックボックス
自動フォローは常に実行したいのでチェックボックスを常時チェックします。
1 2 3 4 5 |
#チェックボックス自動フォロー valfolow = tkinter.BooleanVar() valfolow.set(True) checkBox_folow = tkinter.Checkbutton(text=u"自動フォローする", variable=valfolow) checkBox_folow.place(x=15,y=80) |
ちょっと面倒なのですが
1 2 |
valfolow = tkinter.BooleanVar() valfolow.set(True) |
「BooleanVar」型の変数を作成し(この場合「valfolow 」)その変数にset(True)という形で値をセットします。
その変数を「Checkbutton」の「variable」に設定することでチェックボックスがチェックされた状態になります。
そんな事をしなくても最初から「variable」に「True」じゃダメなのか?と思いますが実際にすると出来ません。
これはpythonの仕様ということであきらめるしかないようです。
そんな感じで各ウィジェットを配置していって出来た画面がこんな感じになります。
ハイ、出来たー!!