在RichtTextBox中,我想用表情符号图像自动替换表情符号字符串(例如/*
* Copyright © 2017 Maria Papadopoulou. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at ...
*/
)。
到目前为止我已经完成了它,除了当我在现有的单词/字符串之间写出表情符号字符串时,图像会被插入到行的末尾。
例如:
:D
结果是:
hello (inserting :D here) this is a message
<<图像
另一个(微小的)问题是插入后插入符号位置在插入之前。
这就是我已经得到的:
hello this is a message ☺
答案 0 :(得分:2)
错误的行是selection.Start?.Paragraph?.Inlines.Add(image);
。您将图像追加到段落的末尾。您应该使用InsertBefore
或InsertAfter
方法之一。
但是要使用这些方法,您应该遍历Inlines并找到要在之前或之后插入的正确内联。这并不困难。您可以通过比较内联的selectionStart
和selectionEnd
到ElementStart
和ElementEnd
属性来确定内联。
另一个棘手的可能性是您要插入的位置可能属于内联。然后你应该拆分内联并创建其他三个:
然后,您可以删除内联并将新的三个内联插入到正确的位置。
Wpf的RichTextBox没有最漂亮的API。有时可能很难使用。还有一个名为AvalonEdit的控件。它比RichTextBox更容易使用。你可能想要考虑它。
答案 1 :(得分:1)
正如@Yusuf Tarık Günaydın建议的那样,我查找了AvalonEdit控件,它可以轻松完成这个操作。
在此example的帮助下,我只需要创建一个import urllib
import urllib.request
from bs4 import BeautifulSoup as soup
from selenium import webdriver
import time
myurl = 'https://twitter.com/search?q=australian%20megafauna&src=typd&lang=en'
driver = webdriver.Firefox()
driver.get(myurl)
#scroll-automation using selenium
lenOfPage = driver.execute_script("window.scrollTo(0,
document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return
lenOfPage;")
match=False
while(match==False):
lastCount = lenOfPage
time.sleep(3)
lenOfPage = driver.execute_script("window.scrollTo(0,
document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return
lenOfPage;")
if lastCount==lenOfPage:
match=True
page_html = driver.page_source
page_soup = soup(page_html, "html.parser")
print(page_soup.title.text)
for tweet in page_soup.findAll('p', {'class': 'tweet-text'}, lang='en'):
print(tweet.text)
来查找表情符号匹配并插入图像。
VisualLineElementGenerator