2017-06-15 13 views
1

いくつかのスクリプトを書いて、いくつかのWebスクラッピングを行うための関数をいくつか書いています。スクリプトを実行すると、結果は単純な 'print'コマンドを使用してIDLEシェルに出力されます。コンソールではなく、TkinterのGUIにプリントする

私はボタンをクリックしたときにスクリプトを実行する基本的なGUI GUIを持っていますが、結果はまだシェルに出力されます。 Master.master()が呼び出されたときに、そのプロセスに埋め込まれているすべてのprintステートメントがGUI上のある領域に印刷されるように、コードを調整する方法はありますか。私が持っているコードは次の通りである:あなたのmasterメソッド呼び出しの結果を表示したい場所をあなたのGUIウィジェットの種類に応じ

from tkinter import * 
import Master #Importing my scraper function 

win = Tk() 
win.title('Hashtag Scraper') 

SearchButton = Button(win,text = 'Search') 

SearchButton.grid(row=2,column = 1) 

htag_label = Label(win,text = 'What Hashtag?') 
htag_label.grid(row = 1,column = 0) 

email_label = Label(win,text = 'FB Email') 
email_label.grid(row = 1,column = 1) 

password_label = Label(win,text = 'FB Password') 
password_label.grid(row = 1,column = 2) 

def button(): 
    htag = hashtag.get() 
    user = usr.get() 
    password = pwd.get() 
    Master.master(htag,refresh = 3,usr = user,pwd = password) #Function call - want this to print on GUI instead of shell 

#win.bind('<Return>', SearchButton) 

SearchButton.configure(command = button) 


hashtag = StringVar() 
#hashtag.set('Hashtag') 
hashtag_entry = Entry(win,textvariable=hashtag) 
hashtag_entry.grid(row = 0, column = 0) 

usr = StringVar() 
usr.set('[email protected]') 
usr_entry = Entry(win,textvariable=usr) 
usr_entry.grid(row = 0, column = 1) 

pwd = StringVar() 
#pwd.set('FB Password') 
pwd_entry = Entry(win,textvariable=pwd) 
pwd_entry.grid(row = 0, column = 2) 
+1

出力をtkinterテキストボックスに挿入できます。 – Stack

+0

私はPythonの無知をお詫びしますが、その結果として変数を設定するよりも、メイン関数の最終的な 'print'ステートメントを戻り値と設定値に変更するだけで簡単ですか? –

+0

それはかなり簡単です、ちょうどそれをここに読んでください:http://effbot.org/tkinterbook/text.htm – Stack

答えて

0

、または多分新しいポップアップテキストボックスのウィンドウでに述べたようにコメントは、あなたが使用したいウィジェットの一種のように変更します。...

class Master: 
    def __init__(self, htag, refresh, usr, pwd): 
     self.htag = htag 
     self.refresh = refresh 
     self.usr = usr 
     self.pwd = pwd 

    def master(self): 
     return '\n'.join([self.htag, str(self.refresh), self.usr, self.pwd]) 

def button(): 
    htag = hashtag.get() 
    user = usr.get() 
    password = pwd.get() 
    m = Master(htag, refresh = 3, usr = user, pwd = password) 
    master_response = m.master() #Function call - want this to print on GUI instead of shell 

    top = Toplevel() 
    top.title("Response from master method") 
    # response_message = "Search Button pushed response" 
    msg = Message(top, text=master_response) 
    msg.pack() 

    button = Button(top, text="Dismiss", command=top.destroy) 
    button.pack() 

出力:

enter image description here

+0

ありがとう!これは私が探しているものに近いものです。私は「検索」ボタンがクリックされるまで何も表示したくない。さらに、私の "Master"関数は実際に何も返さず、結果を表示している間にいくつかのprintステートメントを持っています。それは理にかなっていますか? –

+0

確かにそうです:)私はちょうどアイデアを提供したいと思っていました。これが 'button()'メソッドに置かれていれば、ボタンが押された後でテキストを表示し、テキストは 'master() '戻り値の変数のメソッドテキスト。したがって、 'Master'Ma​​ster()の' print'文は、そのメソッドの最後にある 'return'ステートメント(' return '' .join(text1、text2) 'のようなもの)に入れることができます。 'master_response'変数(ここでコメントアウトしましたが、それを使用します)に戻り、ウィジェットパラメータに' text = master_response'と入力します。 – davedwards

+0

私はそれが意味をなさないかどうかを示すために答えを更新します。 – davedwards

関連する問題