2016-07-25 1 views
0

私は、Feedparserモジュールを使ってYahoo!を読むためのニュースフィードプログラムを作成しています。 RSS APIを使用して、キー・データをテキスト・ファイルに書き込み、Tkinter GUIで編成されたデータを表示します。Tkinterメッセージウィジェットにハイパーリンクを表示することはできますか?

テキストファイル/ Tkinterのメッセージウィジェットでクリック可能なハイパーリンクを持つことが可能であるならば、私が問い合わせました。

私の現在の考え方では、次の方法で実行されるコードを書くことができていることである:

  • テキストファイル内の項目が「HTTP」が含まれている場合は、そのハイパーリンクします。

これを達成するためのPythonicの方法を知っている人、または実際には可能でないかどうかを知っている人は誰でも投稿してください。私が見てコールバックをトリガするためにウェブブラウザを使用して、Tkinterのオブジェクトにイベントをアタッチ関与しているTkinterのアプリケーション内のハイパーリンクの

def news_feed(event): 
    ''' This function creates a new window within the main window, passes an event(left mouse click), and creates a text heading''' 

    root = Toplevel(window) 

    # Create a text heading and define its placement within the grid 
    menu_heading = Label(root, text = 'News feed', font = 'bold') 
    menu_heading.grid(row = 0, column = 0, columnspan = 3, pady = 4) 

    # Create a variable of the selected radio button 
    button_choice = IntVar() 

    def selection(): 
     ''' This function gets the activated radio button and calls its corresponding function.''' 

     # Get the value of the activated radio button, and call its corresponding function 
     news_choice = button_choice.get() 

     # If the user's choice is industry news, ask them which feed they would like (E.g. Stock market), 
     if news_choice == 0: 
      # grab the corresponding url segment to the user's feed choice from the dictionary, 
      news_choice_url = news_areas[news_feed] 
      # set the url variable using by inserting this segment into the API url, 
      rss_url = feedparser.parse('https://au.finance.yahoo.com/news/' + news_choice_url + '/?format=rss') 
      # and call the feed parsing function. 
      parse_feed() 
     # If the user's choice is the second button, call the company news function 
     elif news_choice == 1: 
      company_news() 

    def read_news_file(news_feed_message): 
     '''This function opens the companyNews text file and reads its contents, line by line''' 
     with open('C:\\Users\\nicks_000\\PycharmProjects\\untitled\\SAT\\GUI\\Text Files\\companyNews.txt', mode='r') as inFile: 
      news_data_read = inFile.read() 
      print('\n') 
     news_feed_message.configure(text = news_data_read) 

    def parse_feed(news_feed_message, rss_url): 
     ''' This function parses the Yahoo! RSS API for data of the latest five articles, and writes it to the company news text file''' 

     # Define the RSS feed to parse from, as the url passed in of the company the user chose 
     feed = feedparser.parse(rss_url) 

     try: 
      # Define the file to write the news data to the company news text file 
      with open('C:\\Users\\nicks_000\\PycharmProjects\\untitled\\SAT\\GUI\\Text Files\\companyNews.txt', mode='w') as outFile: 

       # Create a list to store the news data parsed from the Yahoo! RSS 
       news_data_write = [] 
       # Initialise a count 
       count = 0 
       # For the number of articles to append to the file, append the article's title, link, and published date to the news_elements list 
       for count in range(10): 
        news_data_write.append(feed['entries'][count].title) 
        news_data_write.append(feed['entries'][count].published) 
        article_link = (feed['entries'][count].link) 
        article_link = article_link.split('*')[1] 
        news_data_write.append(article_link) 
        # Add one to the count, so that the next article is parsed 
        count+=1 
        # For each item in the news_elements list, convert it to a string and write it to the company news text file 
        for item in news_data_write: 
         item = str(item) 
         outFile.write(item+'\n') 
        # For each article, write a new line to the company news text file, so that each article's data is on its own line 
        outFile.write('\n') 
        # Clear the news_elements list so that data is not written to the file more than once 
        del(news_data_write[:]) 
     finally: 
      outFile.close() 

     read_news_file(news_feed_message) 

    def industry_news(): 
     ''' This function creates a new window within the main window, and displays industry news''' 

     industry_window = Toplevel(root) 
     Label(industry_window, text = 'Industry news').grid() 

    def company_news(): 
     ''' This function creates a new window within the main window, and displays company news''' 

     company_window = Toplevel(root) 
     company_label = Label(company_window, text = 'Company news') 
     company_label.grid(row = 0, column = 0, columnspan = 6) 

     def company_news_handling(company_ticker): 
      ''' This function gets the input from the entry widget (stock ticker) to be graphed.''' 

      # set the url variable by inserting the stock ticker into the API url, 
      rss_url = ('http://finance.yahoo.com/rss/headline?s={0}'.format(company_ticker)) 
      # and call the feed parsing function. 
      parse_feed(news_feed_message, rss_url) 

     # Create the entry widget where the user enters a stock ticker, and define its location within the grid 
     company_ticker_entry = Entry(company_window) 
     company_ticker_entry.grid(row = 1, column = 0, columnspan = 6, padx = 10) 

     def entry_handling(): 
      '''This function validates the input of the entry box, and if there is nothing entered, an error is outputted until a value is''' 

      # Create a variable that equals the input from the entry widget 
      company_ticker = company_ticker_entry.get() 

      # Convert the input into a string 
      company_ticker = str(company_ticker) 

      if company_ticker == '': 
       news_feed_message.configure(text = 'Please input a stock ticker in the entry box.') 
      else: 
       company_news_handling(company_ticker) 

     # Create the button that the user presses when they wish to graph the data of the stock ticker they inputted in the entry widget 
     graph_button = Button(company_window, text = 'SHOW', command = entry_handling, width = 10).grid(row = 2, column = 0, columnspan = 6) 

     news_feed_message = Message(company_window, text='', width=500, borderwidth=5, justify=LEFT, relief=RAISED) 
     news_feed_message.grid(row=3, column=0, columnspan=6) 

答えて

1

ほとんど使用していますが、そこに:

はお時間をいただき、ありがとうございます、ここに私のコードですあなたが言ったようにあなたが行うことができ、この source

から

from tkinter import * 
import webbrowser 

def callback(event): 
    webbrowser.open_new(r"http://www.google.com") 

root = Tk() 
link = Label(root, text="Google Hyperlink", fg="blue", cursor="hand2") 
link.pack() 
link.bind("<Button-1>", callback) 
root.mainloop() 

と再:私が何を意味するかをHERESに簡単な方法、あってもよいですテキストファイルから広告、およびラインが含まれている場合は「http」はイベントへのファイルのハイパーリンクを付け、新しいラベル、およびイベントを作成します。

import re 

with open(fname) as f: 
    content = f.readlines() 
    urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', content) 

アクセスURLのこの後にして生成するには、ラベルのか、どんなウィジェットは、あなたは、URLの、あまりにも添付して、あなたはその後、クリックしたときにそれらのすべては、Webページを開くことができます。

希望これは、私は通り修正するために、次のリンクとその簡単なを使用してTkinterではハイパーリンクを作成するのは簡単だと思い何らかの方法で助け、あなたはより多くの助けが必要な場合は私に知らせて:)

0

The output

あなたの条件

Updated Hyperlink in tkinter

が、これはあなたのために働く願っています。

についてMidhun

+0

「tkinterのハイパーリンク」は、tkinterのハイパーリンクとは関係のないページに移動します。 –

+0

リンクチェックを更新しました。 –

関連する問題