首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:在Mac和Linux中更改Tcltk窗口的图标

R:在Mac和Linux中更改Tcltk窗口的图标
EN

Stack Overflow用户
提问于 2012-10-01 13:50:12
回答 1查看 1.2K关注 0票数 0

我想在栏中插入一个自定义图标,而不是默认的'Tk‘图标。

代码语言:javascript
复制
tcl('wm', 'iconbitmap', .win, 'Icon.ico')

但我对如何在Mac和Linux中做同样的事情感到困惑。显然,.ico格式不起作用,.png、.jpg、.bmp、.xbm或.xpm也不起作用。有什么建议可以让我继续下去吗?图片和进度条形码示例如下:

Sample image http://tinypic.com/r/jt8efn/6 - http://tinypic.com/r/jt8efn/6

代码语言:javascript
复制
tkProgressBar2 <- function (title = 'Test progress bar', label = '', min = 0, max = 100, initial = 0, width = 300, userfn='helvetica', backg='white') {
  useText <- FALSE
  have_ttk <- as.character(tcl('info', 'tclversion')) >= '8.5'
  if (!have_ttk && as.character(tclRequire('PBar')) == 'FALSE') useText <- TRUE
  .win <<- tktoplevel(background=backg)
  tkfocus()
  tcl('wm', 'geometry', .win, '500x100+450+350')
  tcl('wm', 'iconbitmap', .win, '@Icon.xbm')
  .val <- initial
  .killed <- FALSE
  tkwm.geometry(.win, sprintf('%dx80', width + 40))
  tkwm.title(.win, title)
  fn <- tkfont.create(family = userfn, size = 12)
  if (useText) {
    .lab <- tklabel(.win, text = label, font = fn, padx = 0, background=backg)
    tkpack(.lab, side = 'left')
    fn2 <- tkfont.create(family = userfn, size = 16)
    .vlab <- tklabel(.win, text = '0%', font = fn2, padx = 20, background=backg)
    tkpack(.vlab, side = 'right')
    up <- function(value) {
      if (!is.finite(value) || value < min || value > max) return()
      .val <<- value
      tkconfigure(.vlab, text = sprintf('%d%%', round(100 * (value - min)/(max - min))))
    }
  } else {
    .lab <- tklabel(.win, text = label, font = fn, pady = 0, background=backg)
    .tkval <- tclVar(0)
    tkpack(.lab, side = 'top')
    tkpack(tklabel(.win, text = '', font = fn, background=backg), side = 'bottom')
    pBar <- if (have_ttk)
      ttkprogressbar(.win, length = width, variable = .tkval) else
        tkwidget(.win, 'ProgressBar', width = width, variable = .tkval)
    tkpack(pBar, side = 'bottom')
    up <- function(value) {
      if (!is.finite(value) || value < min || value > max) return()
      .val <<- value
      tclvalue(.tkval) <<- 100 * (value - min)/(max - min)
    }
  }
  getVal <- function() .val
  kill <- function() if (!.killed) {
    tkdestroy(.win)
    .killed <<- TRUE
  }
  title <- function(title) tkwm.title(.win, title)
  lab <- function(label) tkconfigure(.lab, text = label)
  tkbind(.win, '<Destroy>', function() stop())
  up(initial)
  structure(list(getVal = getVal, up = up, title = title, label = lab, kill = kill), class = 'tkProgressBar')
}

pb <- tkProgressBar2(title='Performing k-Means clustering', label='Some information in %', min=0, max=100, initial=0, width=400, userfn='verdana', backg='white')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-01 16:27:14

在Linux上,用wm iconphoto设置图标;wm iconbitmap做完全不同的事情。为此,您需要创建一个包含图像数据的photo image

我猜你在R中写的是:

代码语言:javascript
复制
tcl('wm', 'iconphoto', .win, tcl('image', 'create', 'photo', '-file', 'Icon.gif'))

我不太确定您正在使用的Tk版本支持哪些图像格式,包括它提供的任何图像格式支持包。最小的集合是GIF和PPM,除非你(勇敢地)使用8.6,而PNG在默认情况下也是可用的。

(您也可以通过编程创建照片图像的内容,但由于各种原因,创建速度较慢。)

OSX没有同样意义上的窗口图标;当最小化到dock时,每个最小化的窗口只显示其自身的快照,这是正常的。

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

https://stackoverflow.com/questions/12668102

复制
相关文章

相似问题

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