由RGTK2开发的精炼GUI

时间:2012-04-17 07:30:32

标签: r gtk2

我正在使用R和GTK2开发GUI,并创建了照片中显示的内容。

这是脚本:

library(RGtk2)

rm(list=ls())

window.master <- gtkWindow("toplevel",show=FALSE)
window.master$setDefaultSize(1024,768)
window.master$set(title="Window Name")

forms.notebook <- gtkNotebook()
forms.notebook$setTabPos("top")

form1.notebook <- gtkNotebook()
form1.notebook$setTabPos("top")

form1.boxp1.y3 <- gtkVBox(FALSE,3)

form1.framep1y1 <- gtkFrame("AAA")
form1.boxp1y1.2y <- gtkVBox(FALSE,2)
form1.boxp1y1.y1.4x <- gtkHBox(FALSE,4)
form1.boxp1y1.y1.4x$packStart(gtkLabel("BBB"),FALSE,FALSE)
form1.boxp1y1.y1.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y1.4x$packStart(gtkLabel("CCC"),FALSE,FALSE)
form1.boxp1y1.y1.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y2.4x <- gtkHBox(FALSE,4)
form1.boxp1y1.y2.4x$packStart(gtkLabel("DDD"),FALSE,FALSE)
form1.boxp1y1.y2.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y2.4x$packStart(gtkLabel("EEE"),FALSE,FALSE)
form1.boxp1y1.y2.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.2y$add(form1.boxp1y1.y1.4x)
form1.boxp1y1.2y$add(form1.boxp1y1.y2.4x)
form1.framep1y1$add(form1.boxp1y1.2y)

form1.framep1y2 <- gtkFrame("FFF")
form1.boxp1y2.2y <- gtkVBox(FALSE,2)
### 1nd row ###
form1.boxp1y1.y1.6x <- gtkHBox(FALSE,6)
form1.boxp1y1.y1.6x$packStart(gtkLabel("GGG"),FALSE,FALSE)
form1.boxp1y1.y1.6x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y1.6x$packStart(gtkLabel("HHH"),FALSE,FALSE)
form1.boxp1y1.y1.6x$packStart(gtkEntry(),FALSE,FALSE)
form1.boxp1y1.y1.6x$packStart(gtkLabel("III"),FALSE,FALSE)
form1.boxp1y1.y1.6x$packStart(gtkEntry(),FALSE,FALSE)
### 2nd row ###
form1.boxp1y1.y2.4x <- gtkHBox(FALSE,4)
form1.boxp1y1.y2.4x$packStart(gtkLabel("JJJ"),FALSE,FALSE)
form1.boxp1y1.y2.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y2.4x$packStart(gtkLabel("KKK"),FALSE,FALSE)
form1.boxp1y1.y2.4x$packStart(gtkEntry(),TRUE,TRUE)
### 3nd row ###
form1.boxp1y1.y3.4x <- gtkHBox(FALSE,4)
form1.boxp1y1.y3.4x$packStart(gtkLabel("LLL"),FALSE,FALSE)
form1.boxp1y1.y3.4x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y1.y3.4x$packStart(gtkLabel("MMM"),FALSE,FALSE)
form1.boxp1y1.y3.4x$packStart(gtkEntry(),TRUE,TRUE)

form1.boxp1y2.2y$add(form1.boxp1y1.y1.6x)
form1.boxp1y2.2y$add(form1.boxp1y1.y2.4x)
form1.boxp1y2.2y$add(form1.boxp1y1.y3.4x)
form1.framep1y2$add(form1.boxp1y2.2y)

form1.framep1y3 <- gtkFrame("NNN")
form1.boxp1y3.2y <- gtkVBox(FALSE,2)
### 1nd row ###
form1.boxp1y3.y1.6x <- gtkHBox(FALSE,6)
form1.boxp1y3.y1.6x$packStart(gtkLabel("OOO"),FALSE,FALSE)
form1.boxp1y3.y1.6x$packStart(gtkEntry(),TRUE,TRUE)
form1.boxp1y3.y1.6x$packStart(gtkLabel("PPP"),FALSE,FALSE)
form1.boxp1y3.y1.6x$packStart(gtkEntry(),FALSE,FALSE)
form1.boxp1y3.y1.6x$packStart(gtkLabel("QQQ"),FALSE,FALSE)
form1.boxp1y3.y1.6x$packStart(gtkEntry(),FALSE,FALSE)
### 2nd row ###
form1.boxp1y3.y2.2x <- gtkHBox(FALSE,2)
form1.boxp1y3.y2.2x$packStart(gtkCheckButton("RRR"),TRUE,TRUE)
form1.boxp1y3.y2.2x$packStart(gtkCheckButton("SSS"),TRUE,TRUE)

form1.boxp1y3.2y$add(form1.boxp1y3.y1.6x)
form1.boxp1y3.2y$add(form1.boxp1y3.y2.2x)
form1.framep1y3$add(form1.boxp1y3.2y)


form1.boxp1.y3$packStart(form1.framep1y1,FALSE,FALSE)
form1.boxp1.y3$packStart(form1.framep1y2,FALSE,FALSE)
form1.boxp1.y3$packStart(form1.framep1y3,FALSE,FALSE)


form1.boxp2.ud <- gtkVBox(FALSE,2)
form1.framep2f1 <- gtkFrame("TTT")
form1.framep2f2 <- gtkFrame("UUU")
form1.boxp2.ud$add(form1.framep2f1)
form1.boxp2.ud$add(form1.framep2f2)

form1.boxp3.ud <- gtkVBox(FALSE,1)
form1.framep3f1 <- gtkFrame("VVV")
form1.boxp3.ud$add(form1.framep3f1)

form1.boxp4.ud <- gtkVBox(FALSE,1)
form1.framep4f1 <- gtkFrame("WWW")
form1.boxp4.ud$add(form1.framep4f1)

form1.boxp5.ud <- gtkVBox(FALSE,1)
form1.framep5f1 <- gtkFrame("XXX")
form1.boxp5.ud$add(form1.framep5f1)


form1.notebook$add(form1.boxp1.y3)
form1.notebook$add(form1.boxp2.ud)
form1.notebook$add(form1.boxp3.ud)
form1.notebook$add(form1.boxp4.ud)
form1.notebook$add(form1.boxp5.ud)
forms.notebook$add(form1.notebook)
window.master$add(forms.notebook)

window.master$show()

我有几个问题:

  1. 如何更改标签名称? (我无法在任何地方使用Page1,Page2,Page3)
  2. 如何在每行/每帧之间添加间隔符?
  3. 我想将数据框中的信息显示到gtkEntry字段中,我想我需要给出gtkEntry字段的标签,我该怎么做?
  4. 感谢。

    enter image description here

1 个答案:

答案 0 :(得分:1)

一些答案​​:

  • 如何更改标签名称? (我无法在任何地方使用Page1,Page2,Page3):

    而不是form1.notebook$add(form1.boxp1.y3)使用form1$appendPage()选项tab.label。请参阅?gtkNotebookAppendPage

  • 如何在每行/每帧之间添加间隔符?

    对于这样的布局,您应该使用gtkTable。对于gtkVBox,您可以在打包时使用setSpacing?gtkBoxSetSpacing和/或padding

  • 我想将数据框中的信息显示到gtkEntry字段中,我想我需要给出gtkEntry字段的标签,我该怎么做?

不确定你想在这做什么。我猜你想a)命名你的gtkEntry个对象,然后设置他们的文本。如果您使用数据框协调名称,则可以快速完成。例如,使用列表来存储(来自您的BBB标签)的条目:

 l <- list()
 form1.boxp1y1.y1.4x$packStart(l$BBB <- gtkEntry(),TRUE,TRUE) ## BBB from your label

然后假设您的数据框有BBB列(以及其他列),您可以执行类似

的操作
sapply(names(l), function(i) l[[i]]$setText(your_dataframe[1,i]))

或者,如果你不喜欢那么多[你可以使用:

mapply(gtkEntrySetText(l, your_dataframe[1, names(l)])