jQuery/AJAXを使用してPHPでチャットアプリを作成しました。そして今、私はチャットの表示と管理に使用されるGUI(Tkinter)を使用してPython(2.7.3)アプリを作成しようとしています。
ユーザーとチャットの情報を保存するMySQLデータベースがあります。
ブラウザでは、setInterval呼び出しとAJAX呼び出しを使用することで、ページを更新せずに新しいメッセージを取得できます。
Pythonアプリでは、「after」を使用して関数を呼び出し、setIntervalなどの情報を取得しました。私はそれが機能していると思います。ただし、ブラウザで送信した新しいエントリを取得できません。
アプリを再起動せずに(Pythonアプリの起動後に)新しく送信されたエントリを取得するにはどうすればよいですか?
MySQLdbモジュールを使用してデータベースにアクセスして変更し、ローカルホストで作業しています。
例として、get_messages関数を投稿しています。
def get_messages(sohbet_id, messages_name):
messages_name.delete(1.0, END) # Remove the content of Text widget
sql = "SELECT *
FROM ileti
WHERE sohbet_id='" + str(sohbet_id) + "'
ORDER BY created ASC"
cursor.execute(sql)
result = cursor.fetchall() # Fetch all the chat info
chat = ""
for i in result:
name = chatter_name(i[1])
time = datetime.fromtimestamp(i[4]).strftime("%H:%M:%S")
chat += time + " " + str(name) + ": " + str(i[3]) + "\n" # Create a string of chat messages
messages_name.insert(END, chat) # Insert all the chat messages to the Text widget
messages_name.yview(END) # Scroll it down so that the latest message can be seen
messages_name.after(1000, lambda: get_messages(sohbet_id, messages_name)) # Run this again after 1 second
return
編集:もう少し情報:実際に関数でウィジェットを作成します。アプリが起動すると、メインフレームのみが表示され、最初のタブ(すべてのチャットの概要)を作成する関数を呼び出します。次に、その関数は、新しいタブ(個別の)チャットを開く別の関数を呼び出します。これらの個々のチャットタブには、そのチャット(またはタブ)に属するチャットメッセージをクエリするためのこのget_messages関数があります。上記の関数では、messages_nameは実際にはテキストウィジェットです。その関数で変更しているので、それを関数に渡します(他の方法は見つかりませんでした)。get_messagesが呼び出されると、新しい行は表示されません。それらを取得する唯一の方法は、アプリを再起動することです。これは、アプリが起動すると、そのインスタンスのデータベースからすべてのデータを取得するようなもので、それだけです。私が知っている唯一のことは、PHPとのようなものが必要になるでしょう