首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Canvas.move()意外停止

Canvas.move()意外停止
EN

Stack Overflow用户
提问于 2017-10-02 17:37:28
回答 1查看 92关注 0票数 0

所以我正在制作一个可以在屏幕上方显示被刮掉的新闻标题的代码。抓取后,我把所有的标题变成一个单行字符串(大约8000个字符),以便继续滚动它通过滴答器(text+move的tkinter画布)。

然而,在文本的一半,它只是停止移动。在那之后仍然没有显示文本。在检查了txt之后。文件的字符串来自,没有什么特别的地方,它停止。没有换行、制表符或特殊字符。这就是为什么我认为这与单行文本太长而无法显示有关。我还提高了画布的高度,看看它是否正在进行任何类型的包装,将文本留在下面的行中,但事实并非如此。希望这里有人知道怎么回事。谢谢。

代码:

代码语言:javascript
复制
import time
import os
import re

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk

#Create Root Object-----------------------------------------------------------   
root = tk.Tk()
canvas = tk.Canvas(root, height=25, width=root.winfo_screenwidth()-180, bg="black", highlightthickness=0, relief='ridge')

canvas.pack()
root.overrideredirect(1)
root.wm_attributes("-topmost", 1)

script_dir = os.path.dirname(os.path.abspath(__file__))
dat="todisplay.txt"
pathy = os.path.join(script_dir, dat)

f = open(pathy, 'r')
lines = f.readlines()
mystr = '\t'.join([line.strip() for line in lines])
mystr = re.sub( '\s+', ' ', mystr ).strip()

x = 0
y = 0

text = canvas.create_text(x, y, anchor='nw', text=mystr, font=('Helvetica',11), fill='orange')

dx = 1
dy = 0  

while True:
    canvas.move(text, -dx, dy)
    canvas.config(scrollregion=canvas.bbox('all'))
    canvas.update()
time.sleep(.001)


root.mainloop()

出于测试目的,在进入画布之前,mystr是这样的:

代码语言:javascript
复制
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* REUTERS: Deadly twin suicide attack hits Damascus police station REUTERS: Police questioned suspect in Marseille knife killings prior to attack BLOOM: Oil Slides as Boost From Demand, Iraq Tension Seen as Temporary BLOOM: Pound May Have Hit Ceiling With Best Month Since 2015: Chart BLOOM: Libya Oil Output Is Said to Drop to Five-Month Low on Field Halt BLOOM: Qatar Fund Is Said to Explore Asset Sales as New Deals on Hold REUTERS: Fed's rate hikes causing low inflation, Kashkari says BLOOM: Playtika Acquires Israel's Jelly Button to Expand Game Offerings REUTERS: Editors Choice Pictures CB: Why the plebiscite was a disaster REUTERS: Wall Street indexes open at record highs REUTERS: U.S. construction spending rebounds after two straight monthly declines REUTERS: Fiat Chrysler will press on with Magneti Marelli separation next year: CEO CB: Melee in Catalonia as Spanish police violently attack voters CB: SBA opens business recovery center in hurricane-stricken Puerto Rico BLOOM: Prison Video Visits Are No Substitute for Face-to-Face, Especially at These Prices REUTERS: Uber's UK boss quits as firm battles to keep London license WSJ: The Link Between Economic Growth and Tax Cuts Is Tenuous REUTERS: Monarch's demise brings more headaches for holidaymakers WSJ: GOP Challenge With Tax Plan: How Far to Cut Rates for the Rich CB: Puerto Ricans denounce ‘second-class’ status as island struggles to recover REUTERS: U.S.-led coalition service member killed in Iraq: statement BLOOM: Trump Faces Leadership Test After Las Vegas Shooting BLOOM: Can the ‘Uber of Trash’ Clean Up Its Own Business? REUTERS: Calmer times may call for smaller, more extended ECB bond buys: Praet REUTERS: U.S. construction spending rebounds after two straight monthly declines REUTERS: Britain's Monarch Airlines goes bust, stranding thousands REUTERS: Kenyan police fire teargas at opposition protesters in capital REUTERS: Health and safety rules targeted to slash red tape REUTERS: U.S. Supreme Court rejects Samsung appeal in warranty dispute REUTERS: France's Macron backs Spain's constitutional unity in call to PM Rajoy CB: Melee in Catalonia as Spanish police violently attack voters REUTERS: Catalonia worries knock euro against stronger dollar REUTERS: Can't guarantee tax cut for entire middle class: Mnuchin BLOOM: Facebook's Season of Atonement Is Here REUTERS: Catalan leader calls for international mediation in Madrid stand-off BLOOM: Turkey Tourism Recovery No Lira Panacea as Europeans Stay Clear REUTERS: Dollar surges as Fed talk boosts Treasury yields REUTERS: U.S. Supreme Court rejects Samsung appeal in warranty dispute BLOOM: Banks’ Brexit Moving Costs Are Seen Topping $500 Million Each REUTERS: How we tick: U.S. 'body clock' scientists win Nobel medicine prize REUTERS: U.S. top court rejects New Zealand-based internet mogul's appeal CB: Government jobs sprouting as legal cannabis looms in California BLOOM: Automakers Plan Electric Car Blitz as Tesla Burns Billions REUTERS: EU urges Spain to talk to Catalans, condemns violence WSJ: GOP Tax Blueprint: Not Every Corporation Will Benefit REUTERS: Mozambique's President Nyusi will run for re-election in 2019 REUTERS: Bangladesh, Myanmar agree to draw up plan for refugee repatriation: minister REUTERS: Mnuchin says no regrets over government plane use BLOOM: This Cryptocurrency Gained 695% on a Deal With Visa That Didn’t Happen CB: At least 50 killed as gunman opens fire at Las Vegas concert BLOOM: Brexit Bulletin: Boris Watch CB: Trump signals critics of hurricane response will not cow him BLOOM: Manufacturing in U.S. Expands at Fastest Pace in 13 Years CB: EPA-assessed superfund sites unaffected by Hurricane María REUTERS: Uber’s path to win back London: data, fines and fees REUTERS: Google relaxes rules on free news stories, plans new tools REUTERS: Capitalism is the only way, UK finance minister says in challenge to Labour BLOOM: Europe on the Brink of Sugar Deluge as Decade-Long Curbs End BLOOM: Diamond Producers’ Shares Are Having a Rough 12 Months BLOOM: At Least 50 Killed as Gunman Opens Fire at Las Vegas Concert CB: [Annotation] The People Have Spoken BLOOM: Equifax Has Amassed Salary Details for People at 7,100 Companies REUTERS: Palestinian prime minister visits Gaza in reconciliation move with Hamas WSJ: China’s Central Bank Announces Targeted Easing to Boost Small-Business Loans CB: At least 50 killed as gunman opens fire at Las Vegas concert REUTERS: A cell signal, an open bar: tiny wins for Puerto Rico in ruins BLOOM: Euro Factories Add Jobs in Struggle to Keep Up With Orders CB: Trump signals critics of hurricane response will not cow him REUTERS: Disney, Altice shares gain after deal avoids blackout REUTERS: Facebook to give Russia-linked ads to U.S. Congress on Monday REUTERS: Monday Morning Briefing REUTERS: Interactive: Polling on the president CB: US school districts prepare for influx of Puerto Ricans CB: Catalonia calls for Spain mediation amid referendum dispute REUTERS: Britain will lobby U.S., Canada over Bombardier dispute: Hammond REUTERS: Bain says aims to buy Japan ad agency Asatsu-DK for $1.4 billion BLOOM: Warren Buffett Was Right About the Airlines WSJ: ECB’s Praet: Deflation Has Disappeared BLOOM: Uber's U.K. Head to Step Down Amid London Licensing Fight CB: Caribbean faces up to $30 billion in insured losses from María REUTERS: At least 50 dead in Las Vegas shooting REUTERS: Exclusive: Uber's UK boss quits as firm battles to keep London license - email REUTERS: Special Report: HP Enterprise let Russia scrutinize cyberdefense system used by Pentagon CB: San Juan mayor in hurricane spotlight after Trump tweets WSJ: Trump Met With Two Possible Candidates for Fed Chairman CB: Trump praises Puerto Rico aid, mayor says it’s ‘killing us’ REUTERS: Acute shortages plunge island into survival mode REUTERS: Wall Street indexes open at record highs BLOOM: Rising Borrowing Costs Weaken Canadian Consumer Confidence REUTERS: Trump to top U.S. diplomat: Don't bother talking to North Korea WSJ: Global Economy Week Ahead: Eurozone and U.S. Unemployment, India Rate Decision CB: García Padilla: Rubio Is No Friend of Puerto Rico REUTERS: Disney, Altice reach deal that avoids ESPN blackout REUTERS: Catalan leader calls for international mediation in Madrid stand-off BLOOM: Abe’s Support Falls in Two Polls Ahead of Snap Election REUTERS: Russian firm provides new internet connection to N.Korea REUTERS: Oil falls below $56 on signs of higher output CB: Trump signals critics of hurricane response will not cow him CB: Trump scoffs at ‘politically motivated ingrates’ after Maria REUTERS: Fed's rate hikes causing low inflation, Kashkari says BLOOM: Las Vegas Attack Is Deadliest Shooting in Modern U.S. History CB: Puerto Rico electric utility sets up generators to power island quickly REUTERS: Google relaxes rules on free news stories, plans subscription tools BLOOM: How to Turn $140,000 in Sales Into 4,000% in Stock Gains BLOOM: With His Stock Up 330%, a Serial Dealmaker Seeks Biggest Hit Yet BLOOM: Nordstrom Drops on Report Its Buyout Deal Is Losing Support REUTERS: Metro Inc to buy Jean Coutu Group in $3.60 billion deal CB: At least 50 killed as gunman opens fire at Las Vegas concert REUTERS: Islamic State hostages, strongholds stand between U.S.-backed forces and Raqqa's capture CB: María television reporting raises echoes of Katrina coverage REUTERS: U.S. top court rejects New Zealand-based internet mogul's appeal REUTERS: Merkel's Bavarian allies insist on conservative unity before coalition talks BLOOM: How Far Can the Catalan Rebellion Go? BLOOM: Hedge Funds Come Together to Share Cost of MiFID, Research CB: EPA-assessed superfund sites unaffected by Hurricane María WSJ: ISM Manufacturing Index Rises to 60.8 in September BLOOM: Metro to Sell Assets as Part of $3.6 Billion Jean Coutu Purchase REUTERS: Oil falls below $56 on signs of higher output REUTERS: For some elderly Americans, mortgage rules herald harder struggle BLOOM: Starbucks, Google Assailed by Investors Over Gender Policies
*/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 18:20:58

画布对象的总宽度约为2^15 (32768),在字体选择中约为4800个字符。要解决问题,可以将文本限制在小于此值,或者在文本对象的边框小于30,000之后创建一个新对象。

移动文本对象的代码应该用mainloop实现,而不是用time.sleep实现。实现可以如下所示:

代码语言:javascript
复制
def move_text():
    canvas.move(text, -1, 0)
    root.after(10, move_text)  # Time in milliseconds.

然后在move_text之前调用mainloop

如果希望具有字符串的整个长度,则可以实现如下函数:

代码语言:javascript
复制
def check_text():
    x = canvas.bbox(text)[0]
    if x < -30000:
        canvas.itemconfig(text, text=mystr[4808:])
        canvas.move(text, 30000, 0)

请注意,在创建文本时,我已经将mystr拆分为4808 (系统上的限制),因此在画布上移动它时,我会将其修改为文本。您还需要将check_text()添加到move_text中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46530731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档