居中rHandsontable输出 - 闪亮

问题描述 投票:0回答:3

我试图将使用

rhandsontable
创建的两个表居中放置在列中,并获得两个 奇怪的分割表

当我不尝试居中时,一切都很好

有人知道出了什么问题以及如何将我的桌子居中吗?

这是我的 MWE:

rm(list=ls())
library(shiny)
library(rhandsontable)

# Create initial data frames 
x1 <- x2 <- x3 <- x4 <- data.frame(v1=c(1,2), v2 <- c(3,4))

# Server
server <- shinyServer(function(input, output, session) {

  # Data frame 1 to hot 
  previousX1 <- reactive({x1})
  changeX1 <- reactive({
    if(is.null(input$hot_x1)){return(previousX1())}
    else{X1 <- as.data.frame(hot_to_r(input$hot_x1))
    # Perform some operations on X1
    }
  })
  output$hot_x1 <- renderRHandsontable({rhandsontable(changeX1())})

  # Data frame 2 to hot
  previousX2 <- reactive({x2})
  changeX2 <- reactive({
    if(is.null(input$hot_x2)){return(previousX2())}
    else{X2 <- as.data.frame(hot_to_r(input$hot_x2))
    # Perform some operations on X2
    }
  })
  output$hot_x2 <- renderRHandsontable({rhandsontable(changeX2())})

  # Data frame 3 to hot
  previousX3 <- reactive({x3})
  changeX3 <- reactive({
    if(is.null(input$hot_x3)){return(previousX3())}
    else{X3 <- as.data.frame(hot_to_r(input$hot_x3))
    # Perform some operations on X3
    }
  })
  output$hot_x3 <- renderRHandsontable({rhandsontable(changeX3())})

  # Data frame 4 to hot
  previousX4 <- reactive({x4})
  changeX4 <- reactive({
    if(is.null(input$hot_x4)){return(previousX4())}
    else{X4 <- as.data.frame(hot_to_r(input$hot_x4))
    # Perform some operations on X2
    }
  })
  output$hot_x4 <- renderRHandsontable({rhandsontable(changeX4())})
})

# User interface
ui <- shinyUI(fluidPage(
  navbarPage("MWE",
  tabPanel("Center",
            fluidRow(
              column(width=12, align="center", "Alignment (center) with split")),
            fluidRow(
              column(width = 6, align="center", rHandsontableOutput("hot_x1")),
              column(width = 6, align="center", rHandsontableOutput("hot_x2")))
           ),

  tabPanel("Left",

            fluidRow(
              column(width=12, align="center", "Alignment (left) without split")),
            fluidRow(
              column(width = 6, rHandsontableOutput("hot_x3")),
              column(width = 6, rHandsontableOutput("hot_x4")))
           )

  , fluid=TRUE)))

  shinyApp(ui=ui, server=server)
r shiny centering rhandsontable
3个回答
2
投票

我不确定为什么你的桌子在使用

align="center"
时被分割;也许这是你应该发布的东西这里

尽管如此,这里有一个使用

offset
的解决方法:

library(shiny)
library(rhandsontable)

# Create initial data frames
x1 <- data.frame(v1 = c(1, 2), v2 <- c(3, 4))

# Server
server <- shinyServer(function(input, output, session) {

  # Data frame 1 to hot
  previousX1 <- reactive({
    x1
  })

  changeX1 <- reactive({
    if (is.null(input$hot_x1)) {
      return(previousX1())
    }
    else{
      X1 <- as.data.frame(hot_to_r(input$hot_x1))
      # Perform some operations on X1
    }
  })

  output$hot_x6 <- output$hot_x5 <- output$hot_x4 <- output$hot_x3 <- output$hot_x2 <- output$hot_x1 <- renderRHandsontable({
      rhandsontable(changeX1())
    })

})



# User interface
ui <- shinyUI(fluidPage(navbarPage(
  "MWE",
  tabPanel("Center",
           fluidRow(
             column(
               width = 12,
               align = "center",
               "Alignment (center) with split"
             )
           ),
           fluidRow(
             column(
               width = 6,
               align = "center",
               rHandsontableOutput("hot_x1")
             ),
             column(
               width = 6,
               align = "center",
               rHandsontableOutput("hot_x2")
             )
           )),

  tabPanel("Left",
           fluidRow(
             column(
               width = 12,
               align = "center",
               "Alignment (left) without split"
             )
           ),
           fluidRow(
             column(width = 6, rHandsontableOutput("hot_x3")),
             column(width = 6, rHandsontableOutput("hot_x4"))
           )),

  tabPanel("Offset",
           fluidRow(
             column(
               width = 12,
               align = "center",
               "column offset without split"
             )
           ),
           fluidRow(
             column(
               width = 4,
               offset = 2,
               rHandsontableOutput("hot_x5")
             ),
             column(
               width = 4,
               offset = 2,
               rHandsontableOutput("hot_x6")
             )
           )),
  fluid = TRUE
)))

shinyApp(ui = ui, server = server)

1
投票

如果一页上只有一个表格,并且该表格有固定的,您可以将其居中:

style = "margin-left: calc(50vw - 400px); margin-right: calc(50vw - 400px);"

例如:

df = ... some data frame ...

ui <- fluidPage(
  br(),

  style = "margin-left: calc(50vw - 400px); margin-right: calc(50vw - 400px);",
  rHandsontableOutput('table')
)

server = function(input, output, session) 
{
  output$table <- renderRHandsontable({
    rhandsontable(df, width = 800)
  })
}

shinyApp(ui, server)

0
投票

如果不需要行标题(保留列标题),有一个解决方法:

  1. 在ui部分,添加
    tags$style(HTML(".wtHider {margin:auto; width:auto;}"))
  2. 在服务器部分,在
    rowHeaders = NULL
    内添加
    rhandsontable()

Reprex 可在此处获取:https://github.com/jrowen/rhandsontable/issues/365#issuecomment-2352760873

© www.soinside.com 2019 - 2024. All rights reserved.