2017-06-15 35 views
1

我寫了一些包含少量函數的腳本來完成一些網頁掃描。運行腳本時,結果使用簡單的「打印」命令打印到IDLE shell。打印到Tkinter GUI,而不是控制檯

我有一個基本的tkinter GUI,它會在單擊按鈕時運行腳本,但結果仍然會打印到shell。如何調整我的代碼,以便在調用Master.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無知表示歉意,但是如此簡單,只需將主函數中的最終「打印」語句更改爲返回和設置,而不是將結果設置爲變量? –

+0

這很簡單,只需在這裏閱讀:http://effbot.org/tkinterbook/text.htm – Stack

回答

0

根據您想要顯示master方法調用的結果對你的GUI和什麼樣的小部件的地方,或者是在新彈出的文本框窗口中提到的意見,將其更改爲一種小工具,你想使用:

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

謝謝!這是definitley接近我所尋找的。我不想在點擊「搜索」按鈕之前顯示任何內容。此外,我的「主」功能實際上不會返回任何內容,它在整個顯示結果時只有幾個打印語句。那有意義嗎? –

+0

當然:)我只是想提供一個想法,如果這是放在'button()'方法,它會顯示文本文本只有按下按鈕後,文本將是'master()方法文本返回變量。所以'Master.master()'中的所有'print'語句可以在該方法結尾處放入一個'return'語句(可能類似'return''.join(text1,text2)'),返回到'master_response'變量(在這裏註釋掉,但是你會使用它),並將其作爲'text = master_response'放入小部件參數中。 – davedwards

+0

我會更新答案以證明這是否沒有意義。 – davedwards