【问题标题】:changing colour of ttk.Progressbar elements in the xpnative theme - python改变 xpnative 主题中 ttk.Progressbar 元素的颜色 - python
【发布时间】:2012-10-20 20:49:59
【问题描述】:

我正在使用 python 2.7 和 TK 制作一个 gui,它可以访问文本文件并使用其中的数据来做很多事情,但这里相关的是发送 gchat 消息。 目前,我一切正常,我需要一些帮助的一点是,当我调用我的模块发送消息时,消息发送完美,虽然我希望用户知道正在发生的过程,所以我创建了一个 ttk 。进度条。但有几点我想改进:

1) 我想更改实际栏的外观,在查看源文件时,我看不到任何选项,当我搜索问题时,我能找到的唯一解决方法是更改​​源代码,我很确定这只会在使用我的文件运行时更改它,然后当用户运行它时,它会成为标准吗?最好,我希望栏是透明的,虽然蓝色会起作用,但我看到有些人在窗口机器中将蓝色作为状态,窗口是我主要关心的问题,所以如果我可以说,窗口中的蓝色,但是其他地方的本地人,那很好。

2)希望这个更简单一点,但是当按下按钮时,它会从用户输入中获取值,这些值仍然可以更改,可能会改变函数的结果,无论如何都要停止对 tk 的所有输入窗口,然后在功能完成后恢复?

以下是我目前的情况,谢谢你的帮助

            self.progressbar = ttk.Progressbar(self.gcTableButtonsFrame, length = 70, orient=HORIZONTAL, mode ='determinate')
            self.progressbar.grid(column = 0, row = 0, sticky = 'n s')

            #we then pass through the extension and the string 'test' through this fnction from the gchat module which will then send a 
            #gchat message to the extension passed through
            self.bytes = 0
            self.maxbytes = 0
            self.start()
            self.t = thread.start_new_thread(gchat.sendGChatMessage,(text, "test"))
        except IndexError:
            tkMessageBox.showinfo("Invalid Entry", "Please first select an Entry to send to")

def start(self):
    self.progressbar["value"] = 0
    self.maxbytes = 50000
    self.progressbar["maximum"] = 50000
    self.read_bytes()

def read_bytes(self):
    '''simulate reading 500 bytes; update progress bar'''
    selection2 = self.gcTable.selection()
    self.bytes += 700
    self.progressbar["value"] = self.bytes
    if self.bytes < self.maxbytes:
            # read more bytes after 100 ms
        Tk.after(self.mainPyWindow, 100, self.read_bytes)
    else:
        tkMessageBox.showinfo("Message Sent", "A GChat message has been sent to " + self.gcTable.item(selection2, 'values')[1])
        self.progressbar.destroy()

【问题讨论】:

  • 回答了第 2 号。我只是使用了grab_Set,所以所有输入都会转到栏,这显然什么都不做,然后当它被破坏时一切都很好,:self.progressbar.grab_set() 但仍然无法更改风格,除了标准
  • 我现在发现当使用 'alt' 主题时,可以使用 s.configure('TProgressbar', background = 'red') 更改栏,但这不适用于任何其他主题, xpnative 是我想改变的那个。
  • 哦,xpnative 主题不能这样配置;它将小部件元素的绘制交给本机操作系统绘图引擎(我忘记了在哪个库中),并且提供了不适用于所有应用程序的所有小部件的 no 颜色配置机制。这是该主题的一个故意的特征。
  • @DonalFellows 如果您看到我在您的回答中评论的链接,则表明栏的状态可以更改,从而导致颜色更改为任一;红色、蓝色、黄色或绿色。你能帮我实现这个目标吗?我不知道 tcl 或理解 wiki 页面上所说的内容......谢谢

标签: python progress-bar tkinter tk ttk


【解决方案1】:

您的第一个问题有点模棱两可,因为我不确定您是在谈论控制进度条的外观还是它所显示的进度的性质。

进度条的性质通过其值和mode选项控制(determinate进度条与indeterminate不同;前者通过value控制,后者只是显示“有事”)。

进度条的外观由整体主题控制。在 Windows 和 Mac OS X 上,默认主题是系统主题,这意味着进度条看起来是原生的,不管是什么。我最近没有在 Linux 上尝试过主题,所以我忘记了它们在那里的样子;切换主题:

# Switch to the included 'clam' theme
s = ttk.Style()
s.theme_use('clam')

【讨论】:

  • 我指的是进度条的外观,我知道如何更改主题,但是无论如何我都找不到更改主题内的外观,我在windows上,我像xpnative主题,我想知道是否有自定义样式?如果我使用: s=ttk.Style() s.layout('TProgressbar') (就像它在文档教程中说的那样)来接收进度条样式的元素,它说,找不到布局 TProgressabr,所以我无论如何都找不到改变背景?我找到了wiki.tcl.tk/20059,他们改变了酒吧脸的颜色,但我
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 2014-03-12
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多