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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

0回答

1917閲覧

tkinterのLabelのテキストが変更されない

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2018/06/20 10:05

編集2018/06/21 13:06

前提・実現したいこと

tkinterでtwitterの自動いいねとRTをするbotを作っています。
テキストファイルから自動いいね、RTをするアカウントのリストを読み込んで、Textで作ったリストに表示させる時に、ファイルの読み込み状況を表示しようとしているのですが、うまく動きません。

add_like_list_from_file()を実行してから、リストにアカウントが追加されるまでに、少し時間がかかるので、読み込んでいる間はLabelに「読込状況:リストに追加中」と表示させ、リストへの追加が終わったら、「読込状況:リストに追加しました」と表示されるようにしようと思っています。

ですが、add_like_list_from_file()でアカウントをいいねリストに追加しようとすると、「読込状況:リストに追加中」が表示されず、いいねリストにアカウントが表示されると同時に「読込状況:リストに追加しました」と表示されます。

threadingを使えばいいのかと思ってMyThreadクラスを作り、self.state_label.configure(text="読込状況:リストに追加中")をself.mt.start()に変えてみたのですが、今度はアカウントがリストに表示されると同時に「読込状況:リストに追加中」が表示され、「読込状況:リストに追加しました」は表示されませんでした。

add_like_list_from_file()を実行すると、「読込状況:リストに追加中」が表示され、アカウントがリストに追加されたら、「読込状況:リストに追加しました」が表示されるにはどうすればいいでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python

1from tkinter import * 2import tkinter.messagebox as messagebox 3import tkinter.filedialog as filedialog 4import tweepy 5import pickle 6import os.path 7import threading 8 9 10 11class TwitterApp(Frame): 12 def __init__(self, master, ck, cs, at, ats): 13 self.seconds = 60 14 self.minutes = 10 15 self.list_height = 200 16 17 Frame.__init__(self, master) 18 19 self.auth = tweepy.OAuthHandler(ck, cs) 20 self.auth.set_access_token(at, ats) 21 self.api = tweepy.API(self.auth) 22 self.mt = MyThread() 23 24 self.master = master 25 self.master.title("TwitterApp") 26 self.master.geometry("400x300") 27 self.frame = Frame(self.master, width=400, height=350) 28 self.frame.place(x=0, y=0) 29 self.frame_search_and_file = Frame(self.frame, width=400, height=100) 30 self.frame_search_and_file.place(x=0, y=0) 31 32 self.autolike_set = set() 33 34 #読み込み状況 35 self.state_label = Label(self.frame, text="読込状況:") 36 self.state_label.place(x=200, y=30) 37 #いいねリスト 38 self.label_like = Label(self.frame, text="いいねリスト") 39 self.label_like.place(x=60, y=55) 40 self.canvas_like = Canvas(self.frame, width=200, height=200, bd=2, bg='white',\ 41 highlightthickness=0) 42 self.frame_like = Frame(self.canvas_like, width=180, height=self.list_height, \ 43 bg='white') 44 self.scrollbar_like = Scrollbar(self.frame, orient="vertical", \ 45 command=self.canvas_like.yview) 46 self.canvas_like.configure(yscrollcommand=self.scrollbar_like.set) 47 self.scrollbar_like.place(x=172, y=75, height=self.list_height+4) 48 self.canvas_like.place(x=5, y=75) 49 self.canvas_like.create_window((0,0), window=self.frame_like, anchor='nw') 50 self.frame_like.bind("<Configure>", self.canvas_like_config) 51 52 #RTリスト 53 self.label_rt = Label(self.frame, text="RTリスト") 54 self.label_rt.place(x=260, y=55) 55 self.canvas_rt = Canvas(self.frame, width=200, height=200, bd=2, bg='white', \ 56 highlightthickness=0) 57 self.frame_rt = Frame(self.canvas_rt, width=180, height=self.list_height, bg='white') 58 self.scrollbar_rt = Scrollbar(self.frame, orient="vertical", \ 59 command=self.canvas_rt.yview) 60 self.canvas_rt.configure(yscrollcommand=self.scrollbar_rt.set) 61 self.scrollbar_rt.place(x=367, y=75, height=self.list_height+4) 62 self.canvas_rt.place(x=200, y=75) 63 self.canvas_rt.create_window((0,0), window=self.frame_rt, anchor='nw') 64 self.frame_rt.bind("<Configure>", self.canvas_rt_config) 65 66 #テキストファイルからユーザーを追加 67 self.file = None 68 self.filename = StringVar() 69 self.filename.set("ファイル名") 70 self.label_file = Label(self.frame_search_and_file, textvariable=self.filename, \ 71 font=("", 12), width=12, bg="white", bd=1, relief=RIDGE) 72 self.label_file.bind("<Button-3>", self.occur_menu) 73 self.label_file.place(x=200, y=3) 74 self.button_file = Button(self.frame_search_and_file, text="ファイルを選択", \ 75 command=self.select_file) 76 self.button_file.place(x=310, y=0) 77 self.select_file_menu = Menu(self.frame_search_and_file, tearoff=False) 78 self.select_file_menu.add_cascade(label="いいねリストに追加", \ 79 command=self.add_like_list_from_file) 80 self.select_file_menu.add_cascade(label="RTリストに追加", \ 81 command=self.add_rt_list_from_file) 82 self.select_file_menu.add_cascade(label="両方に追加する", \ 83 command=self.add_both_list_from_file) 84 85 #Canvasにスクロールバーを設置 86 def canvas_like_config(self, event): 87 self.canvas_like.configure(scrollregion=self.canvas_like.bbox("all"), width=180, \ 88 height=self.list_height) 89 90 def canvas_rt_config(self, event): 91 self.canvas_rt.configure(scrollregion=self.canvas_rt.bbox("all"), width=180, \ 92 height=self.list_height) 93 94 #ユーザーが存在しないときのエラーメッセージ 95 def user_not_found(self): 96 self.m = messagebox.showerror('showerror','そのユーザーは存在しません') 97 98 #ファイルを選択 99 def select_file(self): 100 self.filetype = [("","*")] 101 self.iDir = os.path.abspath(os.path.dirname(__file__)) 102 self.file = filedialog.askopenfilename(filetypes=self.filetype, initialdir=self.iDir) 103 self.filename.set(os.path.basename(self.file)) 104 105 #メニューを表示 106 def occur_menu(self, event): 107 self.select_file_menu.post(event.x_root, event.y_root) 108 109 #テキストファイルからいいねリストにユーザーを追加 110 def add_like_list_from_file(self): 111 if self.file is not None and os.path.splitext(self.file)[1] == '.txt': 112 self.state_label.configure(text="読込状況:リストに追加中") 113 with open(self.file, 'r', encoding='utf-8') as f: 114 self.like_name_list = f.readlines() 115 for likename in self.like_name_list: 116 likename = likename.replace('\ufeff', '') 117 likename = likename.replace('\n', '') 118 if likename not in self.autolike_set: 119 try: 120 self.api.get_user(screen_name=likename) 121 self.autolike_set.add(likename) 122 LikeNameText(self.frame_like, likename) 123 except tweepy.error.TweepError: 124 pass 125 self.state_label.configure(text="読込状況:リストに追加しました") 126 127 #テキストファイルからRTリストにユーザーを追加 128 def add_rt_list_from_file(self): 129 if self.file is not None and os.path.splitext(self.file)[1] == '.txt': 130 self.mt.start() 131 with open(self.file, 'r', encoding='utf-8') as f: 132 self.rt_name_list = f.readlines() 133 for rtname in self.rt_name_list: 134 rtname = rtname.replace('\ufeff', '') 135 rtname = rtname.replace('\n', '') 136 if rtname not in self.autoRT_set: 137 try: 138 self.api.get_user(screen_name=rtname) 139 self.autoRT_set.add(rtname) 140 RTNameText(self.frame_rt, rtname) 141 except tweepy.error.TweepError: 142 pass 143 self.state_label.configure(text="読込状況:リストに追加したました") 144 145 #テキストファイルから両方のリストにユーザーを追加 146 def add_both_list_from_file(self): 147 if self.file is not None: 148 self.add_like_list_from_file() 149 self.add_rt_list_from_file() 150 151 152 153 154#いいねリストのText 155class LikeNameText(): 156 def __init__(self, master, name): 157 self.master = master 158 self.name = name 159 160 161 #tkinterで表示できない文字を消す 162 self.chr_list = [self.name[j] for j in range(len(self.name)) \ 163 if ord(self.name[j]) in range(65536)] 164 self.name = '' 165 for i,j in enumerate(self.chr_list): 166 self.name = self.name + j 167 168 self.text = Text(self.master, bd=0, width=20, height=1, \ 169 padx=5) 170 self.text.insert('1.0', self.name) 171 self.text.configure(state=DISABLED) 172 self.text.bind("<Button-3>", self.occur_menu) 173 self.text.pack() 174 self.add_set() 175 176 self.menu = Menu(self.master, tearoff=False) 177 self.menu.add_cascade(label='リストから削除する', command=self.delete_text) 178 179 def add_set(self): 180 t.autolike_set.add(self.name) 181 182 def delete_text(self): 183 if len(t.autolike_set) > 0: 184 t.autolike_set.remove(self.name) 185 self.text.destroy() 186 187 def occur_menu(self, event): 188 self.menu.post(event.x_root, event.y_root) 189 190#RTリストのText 191class RTNameText(LikeNameText): 192 def add_set(self): 193 t.autoRT_set.add(self.name) 194 195 def delete_text(self): 196 if len(t.autoRT_set): 197 t.autoRT_set.remove(self.name) 198 self.text.destroy() 199 200class MyThread(threading.Thread): 201 def __init__(self): 202 threading.Thread.__init__(self) 203 204 def run(self): 205 t.state_label.configure(text="読込状況:リストに追加中") 206 207 208 209if __name__ == '__main__': 210 ck = "" 211 cs = "" 212 at = "" 213 ats = "" 214 215 master = Tk() 216 t = TwitterApp(master, ck, cs, at, ats) 217 t.pack() 218 master.mainloop() 219

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問