2012-01-09 45 views
1

我想問一下在gtext中輸入文字後是否有對齊的方法。 例如R:gwidgets:gtext:align text

x <- c(123.4, 5.6) 
y <- c(1.2, 3.657) 
z <- c(12345.6, 789.4) 

df <- data.frame(x, y, z) 

df.co <- capture.output(df) # get df as text 

for (i in 1:length(df.co)) 
{ 
    str.split <- strsplit(df.co, "\\s+") # split every line in its components 
} 

w3 <- gwindow() 
gt3 <- gtext(container=w3) 

for (i in 1:length(str.split)) # length(str.split)=3 
{ 
for (j in 1:length(str.split[[i]])) # length(str.split[[i]])=2 
    { 
     str.split[[i]][[j]] <- paste(str.split[[i]][[j]],"\t",sep="",collapse="") # add tab to each component 
    } 
    str.split[[i]] <- paste(str.split[[i]], sep="", collapse="") # join to one line 
    insert(gt3, str.split[[i]]) 
} 

這樣我們模仿R控制檯。 非常感謝您提前

+0

我非常感謝mathematical.coffe和Dason。我們必須手動輸入family = monospace – 2012-01-09 08:53:40

+0

如果您只想要等寬空間,最好只向構造函數添加一次:gtext(「」,font.attr = c(family =「monospace」),container = w3) – jverzani 2012-01-09 13:55:59

回答

2

沒有辦法在gWidgets的right-align/center/etc中對齊文本。

我推薦使用@Dason建議的等寬字體(儘管這似乎是我的默認字體)。

在代碼方面,你可以清理一點:

  • 你不需要循環在創造str.split的(沒有依賴於 i和你正在寫在每個str.split時間)
  • 您可以消除您用來把標籤中str.split[[i]]
  • 你並不需要添加的str.split每一行單獨的循環,你可以做到這一切在一次。

總結:

x <- c(123.4, 5.6) 
y <- c(1.2, 3.657) 
z <- c(12345.6, 789.4) 

df <- data.frame(x, y, z) 

df.co <- capture.output(df) # get df as text 

# @@ don't need loop 
str.split <- strsplit(df.co, "\\s+") # split every line in its components 

w3 <- gwindow() 
gt3 <- gtext(container=w3) 

# @@ collapse each str.split[[i]] by joining with '\t'. 
str.joined <- sapply(str.split,function(bits) paste(bits,collapse='\t')) 
insert(gt3,str.joined) 

或者,您可以通過df.co <- capture.output(df)更換後一切

insert(gt3,df.co) 

(做兩個並排側和比較:insert(gt3,df.co)右對齊數據幀的每一列,正如打字df顯示的一樣;您擁有的方法(insert(gt3,str.joined) - 對齊每列。

# insert(gt3,str.joined)/method in your question 
    x  y  z 
1 123.4 1.200 12345.6 
2 5.6  3.657 789.4 

# insert(gt3,df.co) 
     x  y  z 
1 123.4 1.200 12345.6 
2 5.6 3.657 789.4 
+0

嗯。我的字體絕對不會默認爲等寬字體。關於如何設置這些默認值的任何想法? – Dason 2012-01-09 01:59:02

+0

沒有線索:/它可能取決於正在使用的基本圖形包(儘管我爲gWidgetstcltk和gWidgetsRgtk2都獲得了等寬字體)。對於它的價值,我在gedit/gtext中獲得了等寬字體,但是對於按鈕/標籤等而言(Arial-ish?)。 – 2012-01-09 02:02:44

+0

哦,好吧。看起來我只需在必要時手動設置font.attr。好的工作順便清理他們的代碼。 – Dason 2012-01-09 02:35:19

2

請確保您使用等寬字體。如果你不這樣做,那麼對齊事物就非常困難。等寬字體使每個字符佔用相同的空間量。

# Instead of 
insert(gt3, str.split[[i]]) 
# Try this 
insert(gt3, str.split[[i]], font.attr = c(family="monospace"))