Python-Tkinter 窗口組件之Text

Text

Text(文本)組件用于顯示和處理多行文本燥撞。在 Tkinter 的所有組件中,Text 組件顯得異常強(qiáng)大和靈活迷帜,適用于多種任務(wù)物舒。雖然該組件的主要目的是顯示多行文本,但它常常也被用于作為簡(jiǎn)單的文本編輯器和網(wǎng)頁瀏覽器使用瞬矩。

何時(shí)使用 Text 組件茶鉴?

Text 組件用于顯示文本文檔,包含純文本或格式化文本(使用不同字體景用,嵌入圖片涵叮,顯示鏈接,甚至是帶 CSS 格式的 HTML 等)伞插。因此割粮,它常常也被用于作為簡(jiǎn)單的文本編輯器和網(wǎng)頁瀏覽器使用。

用法

當(dāng)你創(chuàng)建一個(gè) Text 組件的時(shí)候媚污,它里邊是沒有內(nèi)容的舀瓢。為了給其插入內(nèi)容,你可以使用 insert() 方法以及 "insert" 或 "end" 索引號(hào):

from tkinter import *

root = Tk()

# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()

# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入文字')

root.mainloop()

插入對(duì)象

from tkinter import *

#在 Text 組件中插入對(duì)象耗美,可以使用 window_create() 和 image_create() 方法

root = Tk()

# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()

# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入組件')


def show():
    print('我被點(diǎn)了一下~')


# 插入組件
bt = Button(root, text='點(diǎn)我', command=show, padx=10)
text.window_create(INSERT, window=bt)

text.insert(INSERT, '\n')

# 插入圖片
text.insert(INSERT, '插入圖片')

photo = PhotoImage(file='ico.png')
text.image_create(END, image=photo)

root.mainloop()

delete() 方法

from tkinter import *

# 刪除 Text 組件中的內(nèi)容可以用 delete() 方法京髓,下邊代碼用于刪除所有內(nèi)容(也包含 window 和 image 對(duì)象,但不會(huì)刪除 marks 的內(nèi)容):

root = Tk()

text = Text(root, width=20, height=5)
text.pack()

text.insert(INSERT, "You are good!")

text.delete(1.0, END)

root.mainloop()

將 state 選項(xiàng)從默認(rèn)的 "normal" 修改為 "disabled"商架,使得 Text 組件中的內(nèi)容為“只讀”形式堰怨。不過需要注意的是,當(dāng)你需要進(jìn)行任何修改的時(shí)候蛇摸,記得將 state 選項(xiàng)改回 "normal"备图,否則 insert() 和 delete() 方法都會(huì)失效。

get() 方法(僅獲取文本內(nèi)容):

from tkinter import *
import hashlib

root = Tk()

# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()

# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入組件')


# 檢測(cè)內(nèi)容是否改變
def getSig(contents):
    m = hashlib.md5(contents.encode())
    # 獲取摘要 比較
    return m.digest()


sig = getSig(text.get('1.0', END))


def check():
    contents = text.get('1.0', END)
    if sig != getSig(contents):
        print('內(nèi)容有變動(dòng)')
    else:
        print('沒有變動(dòng)')


Button(root, text='檢查', command=check).pack()

root.mainloop()

index() 方法

from tkinter import *

#用于將所有支持的“索引”格式(請(qǐng)參考下方【Indexes 用法】)轉(zhuǎn)換為“行.列”格式的索引號(hào)

root = Tk()

text = Text(root, width=20, height=5)
text.pack()

print(text.index("insert"))
text.insert("insert", "You are good!")
print(text.index("insert"))
root.mainloop()

跟蹤一個(gè)位置,標(biāo)記

from tkinter import *

root = Tk()

text = Text(root, width=20, height=5)
text.pack()

text.insert(INSERT, "You are good!")
text.mark_set('here', '1.8')
text.insert('here', "very ")

root.mainloop()

search() 方法可以搜索 Text 組件中的內(nèi)容揽涮。

from tkinter import *

#你可以提供一個(gè)確切的目標(biāo)進(jìn)行搜索(默認(rèn))抠藕,也可以使用 Tcl 格式的正則表達(dá)式進(jìn)行搜索(需設(shè)置 regexp 選項(xiàng)為 True)

root = Tk()

text = Text(root, width=20, height=5)
text.pack()

text.insert(INSERT, 'I love FishC.com')
# 搜索
start = '1.0'
while True:
    pos = text.search('o', start, stopindex=END)
    if not pos:
        break
    print("找到了幻馁,位置是:", pos)
    start = pos + '+1c'  # 指向下一個(gè)字符

root.mainloop()

# 如果忽略 stopindex 選項(xiàng)立美,表示直到文本的末尾結(jié)束搜索。
#設(shè)置 backwards 選項(xiàng)為 True渊抽,則是修改搜索的方向(變?yōu)橄蚝笏阉餮┍辏敲?start 變量你應(yīng)該設(shè)置為 END颜说,stopindex 選項(xiàng)設(shè)置為 1.0,最后 "+1c" 改為 "-1c")

“恢復(fù)”和“撤銷”操作

from tkinter import *

root = Tk()

text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
text.insert(INSERT, 'I love FishC.com')

# 撤銷  恢復(fù)
# 撤銷操作 需要打開 undo=True   Text(root, width=50, height=30,undo=True)

def back():
    text.edit_undo()


def callback(event):
    text.edit_separator()


# 自動(dòng)插入分隔符汰聋,撤銷時(shí)一個(gè)字一個(gè)字的撤銷门粪,默認(rèn)人工插入 autoseparators=False
# Text(root, width=50, height=30, undo=True, autoseparators=False)
# 每當(dāng)有按鍵操作的時(shí)候 插入一個(gè)分割符
text.bind('<Key>', callback)

Button(root, text='撤銷', command=back).pack()

root.mainloop()

Indexes 用法

Indexes(索引)是用來指向 Text 組件中文本的位置,跟 Python 的序列索引一樣烹困,Text 組件索引也是對(duì)應(yīng)實(shí)際字符之間的位置玄妈。

Tkinter 提供一系列不同的索引類型:

"line.column"(行/列)
"line.end"(某一行的末尾)
"insert"
"current"
"end"
user-defined marks
user-defined tags("tag.first","tag.last")
selection(SEL_FIRST髓梅,SEL_LAST)
window coordinate("@x,y")
embedded object name(window拟蜻,images)
expressions

"line.column"

from tkinter import *

root = Tk()

text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')

# 使用 index() 方法可以將所有支持的“索引”格式轉(zhuǎn)換為“行/列”格式的索引號(hào)。
# 行/列是最基礎(chǔ)的索引方式枯饿,它們將索引位置的行號(hào)和列號(hào)以字符串的形式表示出來(中間以"."分隔酝锅,例如"1.0")。
# 需要注意的是奢方,行號(hào)以1開始搔扁,列號(hào)則以0開始。你還可以使用以下語法構(gòu)建索引:"%d.%d" % (line, column)
# 指定超出現(xiàn)有文本的最后一行的行號(hào)蟋字,或超出一行中列數(shù)的列號(hào)都不會(huì)引發(fā)錯(cuò)誤稿蹲。對(duì)于這樣的指定,Tkinter解釋為已有內(nèi)容的末尾的下一個(gè)位置鹊奖。
# 需要注意的是苛聘,使用行/列的索引方式看起來像是浮點(diǎn)值。其實(shí)不只像而已忠聚,你在需要指定索引的時(shí)候使用浮點(diǎn)值代替也是可以的

print(text.get(1.2, 1.6))

root.mainloop()

"line.end"

from tkinter import *

root = Tk()

text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')

#行號(hào)加上字符串 ".end" 的格式表示為該行最后一個(gè)字符的位置

text.insert("insert", "I love Python")
print(text.get("1.2", "1.end"))
# 結(jié)果 ;love FishC.comI love Python
root.mainloop()

"insert"

對(duì)應(yīng)插入光標(biāo)的位置设哗。

"current"

對(duì)應(yīng)與鼠標(biāo)坐標(biāo)最接近的位置。不過两蟀,如果你緊按鼠標(biāo)任何一個(gè)按鈕网梢,它會(huì)直到你松開它才響應(yīng)。

"end"

對(duì)應(yīng) Text 組件的文本緩沖區(qū)最后一個(gè)字符的下一個(gè)位置垫竞。

user-defined marks

user-defined marks 是對(duì) Text 組件中位置的命名澎粟。"insert" 和 "current" 是兩個(gè)預(yù)先命名好的 marks,除此之外你可以自定義 marks(請(qǐng)參考下方【Marks 用法】)欢瞪。

User-defined tags

User-defined tags 代表可以分配給 Text 組件的特殊事件綁定和風(fēng)格(請(qǐng)參考下方【Tags 用法】)活烙。

你可以使用 "tag.first"(使用 tag 的文本的第一個(gè)字符之前)和 "tag.last"(使用 tag 的文本的最后一個(gè)字符之后)語法表示標(biāo)簽的范圍。

"%s.first" % tagname
"%s.last" % tagname
如果查無此 tag遣鼓,那么 Tkinter 會(huì)拋出一個(gè)TclError 異常啸盏。

selection(SEL_FIRST,SEL_LAST)

selection 是一個(gè)名為 SEL(或 "sel")的特殊 tag骑祟,表示當(dāng)前被選中的范圍回懦,你可以使用 SEL_FIRST 到 SEL_LAST 來表示這個(gè)范圍。如果沒有選中的內(nèi)容次企,那么 Tkinter 會(huì)拋出一個(gè)TclError 異常怯晕。

window coordinate("@x,y")

你還可以使用窗口坐標(biāo)作為索引。例如在一個(gè)事件綁定中缸棵,你可以使用以下代碼找到最接近鼠標(biāo)位置的字符:

"@%d,%d" % (event.x, event.y)
embedded object name(window舟茶,images)

embedded object name

用于指向在 Text 組件中嵌入的 window 和 image 對(duì)象。要引用一個(gè) window堵第,只要簡(jiǎn)單地將一個(gè) Tkinter 組件實(shí)例作為索引即可吧凉。引用一個(gè)嵌入的 image,只需使用相應(yīng)的 PhotoImage 和 BitmapImage 對(duì)象踏志。

expressions

expressions 用于修改任何格式的索引阀捅,用字符串的形式實(shí)現(xiàn)修改索引的表達(dá)式。
具體表達(dá)式實(shí)現(xiàn)如下:

"+ count chars"

  1. 將索引向前(->)移動(dòng) count 個(gè)字符
  2. 可以越過換行符针余,但不能超過 END 的位置

"- count chars"

  1. 將索引向后(<-)移動(dòng) count 個(gè)字符
  2. 可以越過換行符饲鄙,但不能超過 "1.0" 的位置

"+ count lines"

  1. 將索引向前(->)移動(dòng) count 行
  2. 索引會(huì)盡量保持與移動(dòng)前在同一列上,但如果移動(dòng)后的那一行字符太少圆雁,將移動(dòng)到該行的末尾

"- count lines"

  1. 將索引向后(<-)移動(dòng) count 行
  2. 索引會(huì)盡量保持與移動(dòng)前在同一列上傍妒,但如果移動(dòng)后的那一行字符太少,將移動(dòng)到該行的末尾

" linestart"

  1. 將索引移動(dòng)到當(dāng)前索引所在行的起始位置
  2. 注意摸柄,使用該表達(dá)式前邊必須有一個(gè)空格隔開

" lineend"

  1. 將索引移動(dòng)到當(dāng)前索引所在行的末尾
  2. 注意颤练,使用該表達(dá)式前邊必須有一個(gè)空格隔開

" wordstart"

  1. 將索引移動(dòng)到當(dāng)前索引指向的單詞的開頭
  2. 單詞的定義是一系列字母、數(shù)字驱负、下劃線或任何非空白字符的組合
  3. 注意嗦玖,使用該表達(dá)式前邊必須有一個(gè)空格隔開

" wordend"

  1. 將索引移動(dòng)到當(dāng)前索引指向的單詞的末尾
  2. 單詞的定義是一系列字母、數(shù)字跃脊、下劃線或任何非空白字符的組合
  3. 注意宇挫,使用該表達(dá)式前邊必須有一個(gè)空格隔開
    TIPS:只要結(jié)果不產(chǎn)生歧義,關(guān)鍵字可以被縮寫酪术,空格也可以省略器瘪。例如:"+ 5 chars" 可以簡(jiǎn)寫成 "+5c"

在實(shí)現(xiàn)中翠储,為了確保表達(dá)式為普通字符串,你可以使用 str 或格式化操作來創(chuàng)建一個(gè)表達(dá)式字符串橡疼。下邊例子演示了如何刪除插入光標(biāo)前邊的一個(gè)字符:

def backspace(event):
event.widget.delete("%s-1c" %"insert" , "insert")

Marks 用法

Marks(標(biāo)記)通常是嵌入到 Text 組件文本中的不可見對(duì)象援所。事實(shí)上 Marks 是指定字符間的位置,并跟隨相應(yīng)的字符一起移動(dòng)欣除。Marks 有 "insert"住拭,"current" 和 user-defined marks(用戶自定義的 Marks)。其中历帚,"insert" 和 "current" 是 Tkinter 預(yù)定義的特殊 Marks滔岳,它們不能夠被刪除。

"insert" 用于指定當(dāng)前插入光標(biāo)的位置挽牢,Tkinter 會(huì)在該位置繪制一個(gè)閃爍的光標(biāo)(因此并不是所有的 Marks 都不可見)谱煤。

"current" 用于指定與鼠標(biāo)坐標(biāo)最接近的位置。不過禽拔,如果你緊按鼠標(biāo)任何一個(gè)按鈕趴俘,它會(huì)直到你松開它才響應(yīng)。

你還可以自定義任意數(shù)量的 Marks奏赘,Marks 的名字是由普通字符串組成寥闪,可以是除了空白字符外的任何字符(為了避免歧義,你應(yīng)該起一個(gè)有意義的名字)磨淌。使用 mark_set() 方法創(chuàng)建和移動(dòng) Marks疲憋。

如果你在一個(gè) Mark 標(biāo)記的位置之前插入或刪除文本,那么 Mark 跟著一并移動(dòng)梁只。刪除 Marks 你需要使用 mark_unset() 方法缚柳,刪除 Mark 周圍的文本并不會(huì)刪除 Mark 本身。

如果有做相關(guān)練習(xí)的搪锣,應(yīng)該會(huì)被 Mark 的很多特性所疑惑秋忙,在準(zhǔn)備這個(gè)內(nèi)容的時(shí)候也很是迷惑,找了不知多少文檔......最后總結(jié)為下邊幾個(gè)例子講解:

例1构舟,Mark 事實(shí)上就是索引灰追,用于表示位置:

import tkinter as tk
 
root = tk.Tk()
 
text = tk.Text(root, width = 30, heigh = 3)
text.pack()
 
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
 
root.mainloop()

例2,如果 Mark 前邊的內(nèi)容發(fā)生改變狗超,那么 Mark 的位置也會(huì)跟著移動(dòng)(說白了就是 Mark 會(huì)“記住”它后邊的那貨~):

text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
text.insert("here", "入")

例3弹澎,如果 Mark 周圍的文本被刪除了,Mark 仍然還在噢(只是它后邊的那貨被刪除了努咐,所以它六神無主苦蒿,只能初始化為 "1.0"):

text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
 
text.delete("1.0", "end")
text.insert("here", "入")

例4,只有 mark_unset() 方法可以解除 Mark 的封由浴:

text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
 
text.mark_unset("here")
 
text.delete("1.0", "end")
text.insert("here", "入")

例5佩迟,插入到 Mark 的右側(cè)团滥,通過 mark_gravity() 方法實(shí)現(xiàn)(對(duì)比例2):

text.insert("insert", "I love Python")
 
text.mark_set("here", "1.2")
text.mark_gravity("here", "left")  #默認(rèn)是 "right"
 
text.insert("here", "插")
text.insert("here", "入")

Tags 用法

Tags(標(biāo)簽)通常用于改變 Text 組件中內(nèi)容的樣式和功能。你可以修改文本的字體报强、尺寸和顏色灸姊。另外,Tags 還允許你將文本躺涝、嵌入的組件和圖片與鍵盤和鼠標(biāo)等事件相關(guān)聯(lián)。除了 user-defined tags(用戶自定義的 Tags)扼雏,還有一個(gè)預(yù)定義的特殊 Tag:SEL坚嗜。

SEL(或 "sel")用于表示對(duì)應(yīng)的選中內(nèi)容(如果有的話)。

你可以自定義任意數(shù)量的 Tags诗充,Tags 的名字是由普通字符串組成苍蔬,可以是除了空白字符外的任何字符。另外蝴蜓,任何文本內(nèi)容都支持多個(gè) Tags 描述碟绑,任何 Tag 也可以用于描述多個(gè)不同的文本內(nèi)容。

為指定文本添加 Tags 可以使用 tag_add() 方法:

from tkinter import *

root = Tk()
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
text.insert(INSERT, 'I love FishC.com')

# 行數(shù)從1開始 列從0開始
# 第一個(gè)參數(shù) tag的名字 任意
# 第二個(gè)參數(shù) 范圍:1.7(第一行的第八列)到1.12(第一行第13列)茎匠,單獨(dú)的1.14
text.tag_add('tag1', '1.7', '1.12', '1.14')
text.tag_config('tag1', background='yellow', foreground='red')

# 如果對(duì)同一個(gè)范圍內(nèi)的文本加上多個(gè)Tags格仲,并且設(shè)置相同的選項(xiàng),那么新創(chuàng)建的Tag樣式會(huì)覆蓋比較舊的Tag
# 例如 兩個(gè)參數(shù)诵冒,有一個(gè)改變了凯肋,那么沒變的參數(shù)  還是用之前的
text.tag_add('tag2', '1.7', '1.12', '1.14')
text.tag_config('tag2', background='blue')

root.mainloop()

tag_congif() 方法可以使用的選項(xiàng):

background

  1. 指定該 Tag 所描述的內(nèi)容的背景顏色
  2. 注意:bg 并不是該選項(xiàng)的縮寫,在這里 bg 被解釋為 bgstipple 選項(xiàng)的縮寫

bgstipple

  1. 指定一個(gè)位圖作為背景汽馋,并使用 background 選項(xiàng)指定的顏色填充
  2. 只有設(shè)置了 background 選項(xiàng)該選項(xiàng)才會(huì)生效
  3. 默認(rèn)的標(biāo)準(zhǔn)位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'

borderwidth

  1. 指定文本框的寬度
  2. 默認(rèn)值是 0
  3. 只有設(shè)置了 relief 選項(xiàng)該選項(xiàng)才會(huì)生效
  4. 注意:該選項(xiàng)不能使用 bd 縮寫

fgstipple

  1. 指定一個(gè)位圖作為前景色
  2. 默認(rèn)的標(biāo)準(zhǔn)位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'

font

  1. 指定該 Tag 所描述的內(nèi)容使用的字體

foreground

  1. 指定該 Tag 所描述的內(nèi)容的前景色
  2. 注意:fg 并不是該選項(xiàng)的縮寫侮东,在這里 fg 被解釋為 fgstipple 選項(xiàng)的縮寫

justify
1.控制文本的對(duì)齊方式

  1. 默認(rèn)是 "left"(左對(duì)齊),還可以選擇 "right"(右對(duì)齊)和 "center"(居中)
  2. 注意:需要將 Tag 指向該行的第一個(gè)字符豹芯,該選項(xiàng)才能生效

lmargin1

  1. 設(shè)置 Tag 指向的文本塊第一行的縮進(jìn)
  2. 默認(rèn)值是 0
  3. 注意:需要將 Tag 指向該文本塊的第一個(gè)字符或整個(gè)文本塊悄雅,該選項(xiàng)才能生效

lmargin2

  1. 設(shè)置 Tag 指向的文本塊除了第一行其他行的縮進(jìn)
  2. 默認(rèn)值是 0
  3. 注意:需要將 Tag 指向整個(gè)文本塊,該選項(xiàng)才能生效

offset

  1. 設(shè)置 Tag 指向的文本相對(duì)于基線的偏移距離
  2. 可以控制文本相對(duì)于基線是升高(正數(shù)值)或者降低(負(fù)數(shù)值)
  3. 默認(rèn)值是 0

overstrike

  1. 在 Tag 指定的文本范圍畫一條刪除線
  2. 默認(rèn)值是 False

relief

  1. 指定 Tag 對(duì)應(yīng)范圍的文本的邊框樣式
  2. 可以使用的值有:"sunken", "raised", "groove", "rifge" 或 "flat"
  3. 默認(rèn)值是 "flat"(沒有邊框)

rmargin

  1. 設(shè)置 Tag 指向的文本塊右側(cè)的縮進(jìn)
  2. 默認(rèn)值是 0

spacing1

  1. 設(shè)置 Tag 所描述的文本塊中每一行與上方的空白間隔
  2. 注意:自動(dòng)換行不算
  3. 默認(rèn)值是 0

spacing2

  1. 設(shè)置 Tag 所描述的文本塊中自動(dòng)換行的各行間的空白間隔
  2. 注意:換行符('\n')不算
  3. 默認(rèn)值是 0

spacing3

  1. 設(shè)置 Tag 所描述的文本塊中每一行與下方的空白間隔
  2. 注意:自動(dòng)換行不算
  3. 默認(rèn)值是 0

tabs

  1. 定制 Tag 所描述的文本塊中 Tab 按鍵的功能
  2. 默認(rèn) Tab 被定義為 8 個(gè)字符的寬度
  3. 你還可以定義多個(gè)制表位:tabs=('3c', '5c', '12c') 表示前 3 個(gè) Tab 寬度分別為 3厘米铁蹈,5厘米宽闲,12厘米,接著的 Tab 按照最后兩個(gè)的差值計(jì)算握牧,即:19厘米便锨,26厘米,33厘米
  4. 你應(yīng)該注意到了我碟,它上邊 'c' 的含義是“厘米”而不是“字符”放案,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI矫俺,大約是 '1i' 等于 '72p')
  5. 如果是一個(gè)整型值吱殉,則單位是像素

underline

  1. 該選項(xiàng)設(shè)置為 True 的話掸冤,則 Tag 所描述的范圍內(nèi)文本將被畫上下劃線
  2. 默認(rèn)值是 False

wrap

  1. 設(shè)置當(dāng)一行文本的長(zhǎng)度超過 width 選項(xiàng)設(shè)置的寬度時(shí),是否自動(dòng)換行
  2. 該選項(xiàng)的值可以是:"none"(不自動(dòng)換行)友雳,"char"(默認(rèn))(按字符自動(dòng)換行)和 "word"(按單詞自動(dòng)換行)

tag_raise() 和 tag_lower() 方法來提高和降低某個(gè) Tag 的優(yōu)先級(jí)稿湿。

import tkinter as tk
 
root = tk.Tk()
 
text = tk.Text(root, width=40, height=5)
text.pack()
 
text.tag_config("tag1", background="yellow", foreground="red")
text.tag_config("tag2", foreground="green")
 
text.tag_lower("tag2")
 
text.insert("insert", "I love Python!", ("tag2", "tag1"))
 
root.mainloop()

事件綁定

from tkinter import *
import webbrowser

root = Tk()

text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')

# 事件綁定
text.tag_add('link', '1.7', '1.16')
text.tag_config('link', foreground='blue', underline=True)


def show_hand_cursor(event):
    text.config(cursor='arrow')


def show_xterm_cursor(event):
    text.config(cursor='xterm')


def click(event):
    webbrowser.open('http://www.baidu.com')


# 鼠標(biāo)停留在文字上的時(shí)候
text.tag_bind('link', '<Enter>', show_hand_cursor)
# 鼠標(biāo)離開文字的時(shí)候
text.tag_bind('link', '<Leave>', show_xterm_cursor)
# 左鍵點(diǎn)擊
text.tag_bind('link', '<Button-1>', click)

root.mainloop()

參數(shù)

autoseparators

  1. 指定實(shí)現(xiàn)“撤銷”操作的時(shí)候是否自動(dòng)插入一個(gè)“分隔符”(用于分隔操作記錄)
  2. 默認(rèn)值是 True
  3. 詳見上方用法【“撤銷”和“恢復(fù)”操作】

background / bg

  1. 設(shè)置 Text 組件的背景顏色
  2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種背景顏色顯示(請(qǐng)參考上方【Tags 用法】)

borderwidth / bd

  1. 設(shè)置 Entry 的邊框?qū)挾?/li>
  2. 默認(rèn)值是 1 像素

cursor

  1. 指定當(dāng)鼠標(biāo)在 Text 組件上飄過的時(shí)候的鼠標(biāo)樣式
  2. 默認(rèn)值由系統(tǒng)指定

exportselection

  1. 指定選中的文本是否可以被復(fù)制到剪貼板
  2. 默認(rèn)值是 True
  3. 可以修改為 False 表示不允許復(fù)制文本

font

  1. 設(shè)置 Text 組件中文本的默認(rèn)字體
  2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種字體顯示(請(qǐng)參考上方【Tags 用法】)

foreground / fg

  1. 設(shè)置 Text 組件中文本的顏色
  2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種顏色顯示(請(qǐng)參考上方【Tags 用法】)

height

  1. 設(shè)置 Text 組件的高度
  2. 注意:?jiǎn)挝皇切袛?shù),不是像素噢

highlightbackground

  1. 指定當(dāng) Text 組件沒有獲得焦點(diǎn)的時(shí)候高亮邊框的顏色
  2. 默認(rèn)值由系統(tǒng)指定

highlightcolor

  1. 指定當(dāng) Text 組件獲得焦點(diǎn)的時(shí)候高亮邊框的顏色
  2. 默認(rèn)值由系統(tǒng)指定

highlightthickness

  1. 指定高亮邊框的寬度
  2. 默認(rèn)值是 0

insertbackground

  1. 設(shè)置插入光標(biāo)的顏色
  2. 默認(rèn)是 BLACK(或 "black")

insertborderwidth

  1. 設(shè)置插入光標(biāo)的邊框?qū)挾?/li>
  2. 默認(rèn)值是 0
  3. 提示:你得設(shè)置 insertwidth 選項(xiàng)為比較大的數(shù)值才能看出來噢

insertofftime

  1. 該選項(xiàng)控制光標(biāo)的閃爍頻率(滅)
  2. 單位是毫秒

insertontime

  1. 該選項(xiàng)控制光標(biāo)的閃爍頻率(亮)
  2. 單位是毫秒

insertwidth

  1. 指定光標(biāo)的寬度
  2. 默認(rèn)值是 2 像素

maxundo

  1. 設(shè)置允許“撤銷”操作的最大次數(shù)
  2. 默認(rèn)值是 0
  3. 設(shè)置為 -1 表示不限制

padx

  1. 指定水平方向上的額外間距(內(nèi)容和邊框間)
  2. 默認(rèn)值是 1

pady

  1. 指定垂直方向上的額外間距(內(nèi)容和邊框間)
  2. 默認(rèn)值是 1

relief

  1. 指定邊框樣式
  2. 默認(rèn)值是 "sunken"
  3. 其他可以選擇的值是 "flat"押赊,"raised"饺藤,"groove" 和 "ridge"

selectbackground

  1. 指定被選中文本的背景顏色
  2. 默認(rèn)值由系統(tǒng)指定

selectborderwidth

  1. 指定被選中文本的邊框?qū)挾?/li>
  2. 默認(rèn)值是 0

selectforeground

  1. 指定被選中文本的字體顏色
  2. 默認(rèn)值由系統(tǒng)指定

setgrid

  1. 指定一個(gè)布爾類型的值,確定是否啟用網(wǎng)格控制
  2. 默認(rèn)值是 False

spacing1

  1. 指定 Text 組件的文本塊中每一行與上方的空白間隔
  2. 注意:自動(dòng)換行不算
  3. 默認(rèn)值是 0

spacing2

  1. 指定 Text 組件的文本塊中自動(dòng)換行的各行間的空白間隔
  2. 注意:換行符('\n')不算
  3. 默認(rèn)值是 0

spacing3

  1. 指定 Text 組件的文本中每一行與下方的空白間隔
  2. 注意:自動(dòng)換行不算
  3. 默認(rèn)值是 0

state

  1. 默認(rèn)情況下 Text 組件響應(yīng)鍵盤和鼠標(biāo)事件("normal")
  2. 如果將該選項(xiàng)的值設(shè)置為 "disabled"流礁,那么上述響應(yīng)就不會(huì)發(fā)生涕俗,并且你無法修改里邊的內(nèi)容

tabs

  1. 定制 Tag 所描述的文本塊中 Tab 按鍵的功能
  2. 默認(rèn) Tab 被定義為 8 個(gè)字符的寬度
  3. 你還可以定義多個(gè)制表位:tabs=('3c', '5c', '12c') 表示前 3 個(gè) Tab 寬度分別為 3厘米,5厘米神帅,12厘米再姑,接著的 Tab 按照最后兩個(gè)的差值計(jì)算,即:19厘米找御,26厘米元镀,33厘米
  4. 你應(yīng)該注意到了,它上邊 'c' 的含義是“厘米”而不是“字符”霎桅,還可以選擇的單位有 'i'(英寸)栖疑,'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p')
  5. 如果是一個(gè)整型值滔驶,則單位是像素

takefocus

  1. 指定使用 Tab 鍵可以將焦點(diǎn)移動(dòng)到 Text 組件中
  2. 默認(rèn)是開啟的蔽挠,可以將該選項(xiàng)設(shè)置為 False 避免焦點(diǎn)在此 Text 組件中

undo

  1. 該選項(xiàng)設(shè)置為 True 開啟“撤銷”功能
  2. 該選項(xiàng)設(shè)置為 False 關(guān)閉“撤銷”功能
  3. 默認(rèn)值是 False

width

  1. 設(shè)置 Text 組件的寬度
  2. 注意:?jiǎn)挝皇亲址麛?shù),因此 Text 組件的實(shí)際寬度還取決于字體的大小

wrap

  1. 設(shè)置當(dāng)一行文本的長(zhǎng)度超過 width 選項(xiàng)設(shè)置的寬度時(shí)瓜浸,是否自動(dòng)換行
  2. 該選項(xiàng)的值可以是:"none"(不自動(dòng)換行)澳淑,"char"(按字符自動(dòng)換行)和 "word"(按單詞自動(dòng)換行)

xscrollcommand

  1. 與 scrollbar(滾動(dòng)條)組件相關(guān)聯(lián)(水平方向)
  2. 使用方法可以參考:Scrollbar 組件

yscrollcommand

  1. 與 scrollbar(滾動(dòng)條)組件相關(guān)聯(lián)(垂直方向)
  2. 使用方法可以參考:Scrollbar 組件

方法

bbox(index)
-- 返回給定索引指定的字符的邊界框
-- 返回值是一個(gè) 4 元組:(x, y, width, height)
-- 如果該字符是不可見的,那么返回 None
-- 注意:只有當(dāng) Text 組件被更新的時(shí)候該方法才有效插佛,可以使用 update_idletasks() 方法先更新 Text 組件

compare(index1, op, index2)
-- 返回對(duì)比 index1 和 index2 指定的兩個(gè)字符的結(jié)果
-- op 是操作符:'<', '<=', '==', '>=', '>' 或 '!='(不支持 Python 的 '<>' 操作符)
-- 返回布爾類型的值表示對(duì)比的結(jié)果

debug(boolean=None)
-- 開啟或關(guān)閉 Debug 狀態(tài)

delete(start, end=None)
-- 刪除給定范圍的文本或嵌入對(duì)象
-- 如果在給定范圍內(nèi)有任何 Marks 標(biāo)記的位置杠巡,則將 Marks 移動(dòng)到 start 參數(shù)開始的位置

dlineinfo(index)
-- 返回給定索引指定的字符所在行的邊界框
-- 返回值是一個(gè) 5 元組:(x, y, width, height, offset),offset 表示從該行的頂端到基線的偏移
-- 如果該行不可見雇寇,則返回 None
-- 注意:只有當(dāng) Text 組件被更新的時(shí)候該方法才有效氢拥,可以使用 update_idletasks() 方法先更新 Text 組件

dump(index1, index2=None, command=None, **kw)
-- 返回 index1 和 index2 之間的內(nèi)容
-- 返回的值是一個(gè)由 3 元組(關(guān)鍵詞,值锨侯,索引)組成的列表嫩海,關(guān)鍵詞參數(shù)的順序?yàn)椋篴ll, image, mark, tag, text, window
-- 默認(rèn)關(guān)鍵詞是 'all',表示全部關(guān)鍵詞均為選中狀態(tài)
-- 如果需要篩選個(gè)別關(guān)鍵詞囚痴,可以用 dump(index1, index2, image=True, text=True) 這樣的形式調(diào)用
-- 如果指定了 command 函數(shù)叁怪,那么會(huì)為列表中的每一個(gè)三元組作為參數(shù)調(diào)用一次該函數(shù)(這種情況下,dump() 不返回值)

edit_modified(arg=None)
-- 該方法用于查詢和設(shè)置 modified 標(biāo)志(該標(biāo)標(biāo)志用于追蹤 Text 組件的內(nèi)容是否發(fā)生變化)
-- 如果不指定 arg 參數(shù)深滚,那么返回 modified 標(biāo)志是否被設(shè)置
-- 你可以傳遞顯式地使用 True 或 False 作為參數(shù)來設(shè)置或清除 modified 標(biāo)志
-- 任何代碼或用戶的插入或刪除文本操作奕谭,“撤銷”或“恢復(fù)”操作涣觉,都會(huì)是的 modified 標(biāo)志被設(shè)置

edit_redo(self)
-- “恢復(fù)”上一次的“撤銷”操作
-- 如果 undo 選項(xiàng)為 False,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】

edit_reset()
-- 清空存放操作記錄的棧

edit_separator()
-- 插入一個(gè)“分隔符”到存放操作記錄的棧中血柳,用于表示已經(jīng)完成一次完整的操作
-- 如果 undo 選項(xiàng)為 False官册,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】

edit_undo()
-- 撤銷最近一次操作
-- 如果 undo 選項(xiàng)為 False,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】

get(index1, index2=None)
-- 返回 index1 到 index2(不包含)之間的文本
-- 如果 index2 參數(shù)忽略难捌,則返回一個(gè)字符
-- 如果包含 image 和 window 的嵌入對(duì)象膝宁,均被忽略
-- 如果包含有多行文本,那么自動(dòng)插入換行符('\n')

image_cget(index, option)
-- 返回 index 參數(shù)指定的嵌入 image 對(duì)象的 option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 image 對(duì)象根吁,則拋出 TclError 異常

image_configure(index, **options)
-- 修改 index 參數(shù)指定的嵌入 image 對(duì)象的一個(gè)或多個(gè) option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 image 對(duì)象员淫,則拋出 TclError 異常

image_create(index, cnf={}, **kw)
-- 在 index 參數(shù)指定的位置嵌入一個(gè) image 對(duì)象
-- 該 image 對(duì)象必須是 Tkinter 的 PhotoImage 或 BitmapImage 實(shí)例
-- 可選選項(xiàng) align:設(shè)定此圖像的垂直對(duì)齊,可以是 "top"婴栽、"center"监署、"bottom" 或 "baseline"
-- 可選選項(xiàng) image:PhotoImage 或 BitmapImage 對(duì)象
-- 可選選項(xiàng) name:你可以為該圖像實(shí)例命名合砂,如果你忽略此選項(xiàng),那么 Tkinter 會(huì)自動(dòng)為其取一個(gè)獨(dú)一無二的名字访敌。
-- 可選選項(xiàng) padx:設(shè)置水平方向上的額外間距
-- 可選選項(xiàng) pady:設(shè)置垂直方向上的額外間距

image_names()
-- 返回 Text 組件中嵌入的所有 image 對(duì)象的名字

index(index)
-- 將 index 參數(shù)指定的位置以 "line.column" 的索引形式返回
-- index 參數(shù)支持任何格式的索引

insert(index, text, *tags)
-- 在 index 參數(shù)指定的位置插入字符串
-- 可選參數(shù) tags 用于指定文本的樣式
-- 詳見上方【Tags 用法】

mark_gravity(self, markName, direction=None)
-- 設(shè)置 Mark 的方向挤聘,可以是 "left" 或 "right"(默認(rèn)是 "right"轰枝,即如果在 Mark 處插入文本的話,Mark 將發(fā)生相應(yīng)的移動(dòng)以保持在插入文本的右側(cè))
-- 如果設(shè)置為 "left"组去,那么在 Mark 處插入文本并不會(huì)移動(dòng) Mark(因?yàn)?Mark 在插入文本的左側(cè))
-- 如果忽略 direction 參數(shù)鞍陨,則返回指定 Mark 的方向
-- 詳見上方【Marks 用法】

mark_names()
-- 返回 Text 組件中所有 Marks 的名字
-- 包括兩個(gè)特殊 Mark:"insert" 和 "current"
-- 注意:"end" 是特殊的索引,不是 Mark

mark_next(index)
-- 返回在 index 指定的位置后邊的一個(gè) Mark 的名字
-- 如果不存在則返回空字符串

mark_previous(index)
-- 返回在 index 指定的位置前邊的一個(gè) Mark 的名字
-- 如果不存在則返回空字符串

mark_set(markName, index)
-- 移動(dòng) Mark 到 index 參數(shù)指定的位置
-- 如果 markName 參數(shù)指定的 Mark 不存在从隆,則創(chuàng)建一個(gè)新的 Mark

mark_unset(*markNames)
-- 刪除 markNames 指定的 Marks
-- 不能刪除預(yù)定義的 "insert" 和 "current"

replace(index1, index2, chars, *args)
-- 將 index1 到 index2 之間的內(nèi)容替換為 chars 參數(shù)指定的字符串
-- 如果需要為替換的內(nèi)容添加 Tag诚撵,可以在 args 參數(shù)指定 Tag
-- 詳見上方【Tags 用法】

scan_dragto(x, y)
-- 詳見下方 scan_mark(x, y)

scan_mark(x, y)
-- 使用這種方式來實(shí)現(xiàn) Text 組件內(nèi)容的滾動(dòng)
-- 需要將鼠標(biāo)按鈕事件以及鼠標(biāo)當(dāng)前位置綁定到 scan_mark(x, y) 方法,然后將 <motion> 事件及當(dāng)前鼠標(biāo)位置綁定到 scan_dragto(x, y) 方法键闺,就可以實(shí)現(xiàn) Text 組件的內(nèi)容在當(dāng)前位置和 scan_mark(x, y) 指定的位置 (x, y) 之間滾動(dòng)

search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None)
-- 從 index 開始搜索 pattern寿烟,到 stopindex 結(jié)束(不指定表示搜索到末尾)
-- 如果成功找到,以 "line.column" 返回第一個(gè)匹配的字符辛燥;否則返回空字符串
-- forwards 參數(shù)設(shè)置為 True 表示向前(->)搜索
-- backwards 參數(shù)設(shè)置為 True 表示向后(<-)搜索
-- exact 參數(shù)設(shè)置為 True 表示搜索與 pattern 完全匹配的結(jié)果
-- regexp 參數(shù)設(shè)置為 True筛武,則 pattern 被解釋為 Tcl 格式的正則表達(dá)式
-- nocase 參數(shù)設(shè)置為 True 是忽略大小寫,默認(rèn)是區(qū)分大小寫的搜索
-- count 參數(shù)指定為一個(gè) IntVar 的 Tkinter 變量挎塌,用于存放當(dāng)找到匹配的字符個(gè)數(shù)(如果匹配結(jié)果中沒有嵌入的 image 或 window 對(duì)象的話徘六,一般該值等于 pattern 的字符個(gè)數(shù))

see(index)
-- 滾動(dòng)內(nèi)容,確保 index 指定的位置可見

tag_add(tagName, index1, index2=None)
-- 為 index1 到 index2 之間的內(nèi)容添加一個(gè) Tag(tagName 參數(shù)指定)
-- 如果 index2 參數(shù)忽略榴都,則單獨(dú)為 index1 指定的內(nèi)容添加 Tag
-- 詳見上方【Tags 用法】

tag_bind(tagName, sequence, func, add=None)
-- 為 Tag 綁定事件
-- 詳見上方【Tags 用法】

tag_cget(tagName, option)
-- 返回 tagName 指定的 option 選項(xiàng)的值

tag_config(tagName, cnf=None, **kw)
-- 跟 tag_configure(tagName, cnf=None, **kw) 一樣

tag_configure(tagName, cnf=None, **kw)
-- 設(shè)置 tagName 的選項(xiàng)
-- 詳見上方【Tags 用法】

tag_delete(*tagNames)
-- 刪除 tagNames 指定的 Tags

tag_lower(tagName, belowThis=None)
-- 降低 Tag 的優(yōu)先級(jí)
-- 如果 belowThis 參數(shù)不為空待锈,則表示 tagName 需要比 belowThis 指定的 Tag 優(yōu)先級(jí)更低
-- 詳見上方【Tags 用法】

tag_names(index=None)
-- 如果不帶參數(shù),表示返回 Text 組件中所有 Tags 的名字
-- index 參數(shù)表示返回該位置上所有的 Tags 的名字

tag_nextrange(tagName, index1, index2=None)
-- 在 index1 到 index2 的范圍內(nèi)第一個(gè) tagName 的位置
-- 如果沒有則返回空字符串

tag_prevrange(tagName, index1, index2=None)
-- tag_nextrange() 的反向查找嘴高,也就是查找范圍是 index2 到 index1

tag_raise(tagName, aboveThis=None)
-- 提高 Tag 的優(yōu)先級(jí)
-- 如果 aboveThis 參數(shù)不為空炉擅,則表示 tagName 需要比 aboveThis 指定的 Tag 優(yōu)先級(jí)更高
-- 詳見上方【Tags 用法】

tag_ranges(tagName)
-- 返回所有 tagName 指定的文本辉懒,并將它們的范圍以列表的形式返回

tag_remove(tagName, index1, index2=None)
-- 刪除 index1 到 index2 之間所有的 tagName
-- 如果忽略 index2 參數(shù),那么只刪除 index1 指定的那個(gè)字符的 tagName(如果有的話)

tag_unbind(tagName, sequence, funcid=None)
-- 解除與 tagName 綁定的事件(sequence 指定)

window_cget(index, option)
-- 返回 index 參數(shù)指定的嵌入 window 對(duì)象的 option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 window 對(duì)象谍失,則拋出 TclError 異常

window_config(index, cnf=None, **kw)
-- 跟 window_configure(index, cnf=None, **kw) 一樣

window_configure(index, cnf=None, **kw)
-- 修改 index 參數(shù)指定的嵌入 window 對(duì)象的一個(gè)或多個(gè) option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 window 對(duì)象眶俩,則拋出 TclError 異常

window_create(index, **options)
-- 在 index 參數(shù)指定的位置嵌入一個(gè) window 對(duì)象
-- 支持兩種方式在 Text 組件中嵌入 window 對(duì)象:請(qǐng)看下方 create 選項(xiàng)和 window 選項(xiàng)的描述
-- 可選選項(xiàng) align:設(shè)定此圖像的垂直對(duì)齊,可以是 "top"快鱼、"center"颠印、"bottom" 或 "baseline"
-- 可選選項(xiàng) create:指定一個(gè)回調(diào)函數(shù)用于創(chuàng)建嵌入的 window 組件,該函數(shù)沒有參數(shù)抹竹,并且必須創(chuàng)建 Text 的子組件并返回
-- 可選選項(xiàng) padx:設(shè)置水平方向上的額外間距
-- 可選選項(xiàng) pady:設(shè)置垂直方向上的額外間距
-- 可選選項(xiàng) stretch:該選項(xiàng)控制當(dāng)行的高度大于嵌入組件的高度時(shí)线罕,嵌入組件是否延伸。默認(rèn)值是 False窃判,表示組件保持原形钞楼;設(shè)置為 True 表示將該組件垂直部分延伸至行的高度
-- 可選選項(xiàng) window:指定一個(gè)已經(jīng)創(chuàng)建好的 window 組件,該組件必須是 Text 組件的子組件

window_names()
-- 返回 Text 組件中嵌入的所有 window 對(duì)象的名字

xview(*args)
-- 該方法用于在水平方向上滾動(dòng) Text 組件的內(nèi)容袄琳,一般通過綁定 Scollbar 組件的 command 選項(xiàng)來實(shí)現(xiàn)(具體操作參考:Scrollbar)
-- 如果第一個(gè)參數(shù)是 "moveto"询件,則第二個(gè)參數(shù)表示滾動(dòng)到指定的位置:0.0 表示最左端,1.0 表示最右端
-- 如果第一個(gè)參數(shù)是 "scroll"唆樊,則第二個(gè)參數(shù)表示滾動(dòng)的數(shù)量宛琅,第三個(gè)參數(shù)表示滾動(dòng)的單位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滾動(dòng)三行

xview_moveto(fraction)
-- 跟 xview("moveto", fraction) 一樣

xview_scroll(number, what)
-- 跟 xview("scroll", number, what) 一樣

yview(*args)
-- 該方法用于在垂直方向上滾動(dòng) Text 組件的內(nèi)容逗旁,一般通過綁定 Scollbar 組件的 command 選項(xiàng)來實(shí)現(xiàn)(具體操作參考:Scrollbar)
-- 如果第一個(gè)參數(shù)是 "moveto"嘿辟,則第二個(gè)參數(shù)表示滾動(dòng)到指定的位置:0.0 表示最頂端,1.0 表示最底端
-- 如果第一個(gè)參數(shù)是 "scroll"片效,則第二個(gè)參數(shù)表示滾動(dòng)的數(shù)量红伦,第三個(gè)參數(shù)表示滾動(dòng)的單位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滾動(dòng)三頁

yview_moveto(fraction)
-- 跟 yview("moveto", fraction) 一樣

yview_scroll(number, what)
-- 跟 yview("scroll", number, what) 一樣

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淀衣,一起剝皮案震驚了整個(gè)濱河市昙读,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舌缤,老刑警劉巖箕戳,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異国撵,居然都是意外死亡陵吸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門介牙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壮虫,“玉大人,你說我怎么就攤上這事∏羲疲” “怎么了剩拢?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)饶唤。 經(jīng)常有香客問我徐伐,道長(zhǎng),這世上最難降的妖魔是什么募狂? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任办素,我火速辦了婚禮,結(jié)果婚禮上祸穷,老公的妹妹穿的比我還像新娘性穿。我一直安慰自己,他們只是感情好雷滚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布需曾。 她就那樣靜靜地躺著,像睡著了一般祈远。 火紅的嫁衣襯著肌膚如雪呆万。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天绊含,我揣著相機(jī)與錄音桑嘶,去河邊找鬼炊汹。 笑死躬充,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讨便。 我是一名探鬼主播充甚,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼霸褒!你這毒婦竟也來了伴找?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤废菱,失蹤者是張志新(化名)和其女友劉穎技矮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殊轴,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衰倦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旁理。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片樊零。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孽文,靈堂內(nèi)的尸體忽然破棺而出驻襟,到底是詐尸還是另有隱情夺艰,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布沉衣,位于F島的核電站郁副,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豌习。R本人自食惡果不足惜霞势,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斑鸦。 院中可真熱鬧愕贡,春花似錦、人聲如沸巷屿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘱巾。三九已至憨琳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬昭,已是汗流浹背篙螟。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留问拘,地道東北人遍略。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骤坐,于是被迫代替她去往敵國(guó)和親绪杏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容