jun*_*mek 5 python treeview tkinter
我的树视图小部件中有十个链接(http://www.example.com、http://www.example1.com等)。它是插入到树状视图中的纯文本。是否可以使其可点击?如何将文本转换为链接?是否可以在 treeview 小部件中使用?
我想让这些行可以点击链接(就像在普通浏览器中一样)。只需单击,打开默认浏览器并转到页面(例如http://dieta.pl/)。
这是我的代码示例(一部分):
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from google import search
from urlparse import urlparse
from SiteCrawler import SiteCrawler
import Tkinter as tk
from Tkinter import *
import ttk
# from Tkinter.font import Font
class Main(Frame):
def __init__(self):
self.fraza = None
self.master = tk.Tk()
if os.name == 'nt':
self.master.state('zoomed')
else:
self.master.wm_attributes('-zoomed', 1)
self.master.title('Site crawler')
self.master.geometry("800x600+600+200")
# Frame g?owny
self.f = Frame(self.master)
self.f.place(relx=.5, rely=.35, anchor="c")
# Label do wpisania frazy
L1 = Label(self.master, text=u"Wpisz fraz?", font="Verdana 15 bold")
L1.grid(in_=self.f, row=1, column=2)
# Entry box do wpisania frazy
self.phrase = Entry(self.master, font="Verdana 15 bold",
justify=CENTER)
self.phrase.grid(in_=self.f, row=1, column=3, columnspan=3)
# Button do zatwierdzenia frazy
Bt1 = Button(self.master, text=u'Wczytaj fraz?',
command=lambda: self.results(self.phrase.get()), width=20)
Bt1.grid(in_=self.f, row=2, column=3, columnspan=3)
# ttk.tree widget
tree_cols = ('Lp', 'Url', 'Fraza w Title',
'Fraza w description', 'Fraza w Keywords',
'Fraza w H1', 'Fraza w H2', 'Fraza w ca?ej stronie')
self.tree = ttk.Treeview(columns=tree_cols,
show='headings', height=10)
for i in tree_cols:
self.tree.heading(i, text=i)
self.tree.column('Lp', width=50, anchor=CENTER)
# self.tree.heading("two", text="Fraza w Title")
# self.tree.heading("three", text="Fraza w Description")
# self.tree.heading("four", text="Fraza w Description")
self.tree.grid(in_=self.f, row=4, column=1, columnspan=4, sticky=NSEW)
self.master.mainloop()
def results(self, phrase):
Crawler = SiteCrawler()
self.fraza = phrase
domains = []
for i in search(phrase, stop=10):
print i
parsed_url = urlparse(i)
domain = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_url)
if domain not in domains:
domains.append(domain)
for index, url in enumerate(domains[:10]):
h = ['h1', 'h2']
Crawler.load_url(url, self.fraza)
Crawler.title()
Crawler.get_description()
Crawler.get_keywords()
for i in h:
Crawler.count_H(i)
Crawler.all_keywords()
self.tree.insert('', 'end', values=(
index + 1, url, Crawler.title(), Crawler.get_description(),
Crawler.get_keywords(), Crawler.count_H('h1'),
Crawler.count_H('h2'), Crawler.all_keywords()))
if __name__ == "__main__":
main = Main()
main.results()
Run Code Online (Sandbox Code Playgroud)
对于每个小部件,您可以将Python 函数和方法绑定到事件。Bind一个函数到你的treeview。你需要绑定你的树,在 __init__函数中添加这个:
self.tree.bind("<Double-1>", self.link_tree)
Run Code Online (Sandbox Code Playgroud)
创建一个函数:
def link_tree(self,event):
input_id = self.tree.selection()
self.input_item = self.tree.item(input_id,"text")
#for opening the link in browser
import webbrowser
webbrowser.open('{}'.format(self.input_item))
#do whatever you want
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |