2011-12-08 33 views
2

这里我的问题不是如何创建一个进度条,而是如何创建一个进度条来跟踪和更新两个不同的进程。例如在同一窗口内我想有当前模拟指数的酒吧保持跟踪和另一间酒吧保持另一系列数字的轨道......我当前的代码是:Double R tcltk进度条

library(tcltk2) 

pb1 <- tkProgressBar(title = "Simulation Progress...", min = 1, max = 10, width = 300) 
pb2 <- tkProgressBar(title = "Simulation Progress...", min = 2000, max = 2020, width = 300) 

for (index in 1:10){ 

setTkProgressBar(pb1, index, label = paste("Index",index)) 

for (year in 2000:2020){ 

setTkProgressBar(pb2, year, label = paste("Year",year)) 

} 

} 

我想有两个酒吧在一起,不分开......任何帮助赞赏!

+0

我的猜测是,你就必须深入到代码,并创建自己的版本砍死。 –

回答

4

使用tkProgressBar不可能的,你就必须向下挖掘到的tcltk深度,是这样的:

library(tcltk2) 

root <- tktoplevel() 

l1 <- tk2label(root,"Simulation Progress...") 
pb1 <- tk2progress(root, length = 300) 
tkconfigure(pb1, value=0, maximum=9) 

l2 <- tk2label(root, "Simulation Progress...") 
pb2 <- tk2progress(root, length = 300) 
tkconfigure(pb2, value=0, maximum=20, maximum = 20) 

tkpack(l1) 
tkpack(pb1) 
tkpack(l2) 
tkpack(pb2) 

tcl("update") 

for (index in 1:10){ 

    tkconfigure(l1, text = paste("Index", index)) 
    tkconfigure(pb1, value = index - 1) 

    for (year in 2000:2020){ 
     tkconfigure(l2, text = paste("Year",year)) 
     tkconfigure(pb2, value = year - 2000) 


    tcl("update") 
    }  

} 
+0

有几个问题:为什么你需要使用tcl(“update”),为什么在2 tkconfigure(...)中使用value = 0,maximum = 0和value = 0,maximum = 20?谢谢你的帮助! – Francesco

+0

那些看起来像拼写错误给我。我会尝试自己的代码,而不是害怕尝试。你可以很快地分辨出它是否按你的意愿工作。 –

+0

0确实是一个拼写错误,应该是9 - 这与你的代码略有不同,因为tk2progress没有最小/最大概念,范围从0到最大。 tcl(“更新”)用于强制屏幕更新,请看这里:http://www2.tcl.tk/1252 – themel