изменение цвета элементов ttk.Progressbar в теме xpnative - python

Я использую python 2.7 и TK для создания графического интерфейса, который обращается к текстовым файлам и использует содержащиеся в них данные для выполнения многих задач, но здесь уместно отправить сообщение 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()

person jbaldwin    schedule 31.10.2012    source источник
comment
ответил номер 2. Я просто использовал grab_Set, чтобы все входные данные поступали в панель, которая, очевидно, ничего не делает, затем, когда она уничтожается, все в порядке, : self.progressbar.grab_set(), но все еще не могу изменить стиль, кроме стандартов   -  person jbaldwin    schedule 31.10.2012
comment
Теперь я обнаружил, что при использовании альтернативной темы панель можно изменить с помощью s.configure('TProgressbar', background = 'red'), но это не работает ни с какими другими темами, xpnative - это то, что я хотел бы изменить.   -  person jbaldwin    schedule 07.11.2012
comment
О, тема xpnative не настраивается таким образом; он передает отрисовку элементов виджета собственному механизму рисования ОС (я забыл, в какой библиотеке он находится), и это не обеспечивает никакого механизма настройки цвета, который не применяется ко всем виджетам всех приложений. Это преднамеренная особенность этой темы.   -  person Donal Fellows    schedule 14.11.2012
comment
@DonalFellows Если вы видите ссылку, которую я прокомментировал в своем ответе, она показывает, что состояние панели может быть изменено, в результате чего цвет изменится на любой; красный, синий, желтый или зеленый. не могли бы вы помочь мне достичь этого? Я не знаю tcl и не понимаю, что написано на вики-странице... спасибо   -  person jbaldwin    schedule 14.11.2012


Ответы (1)


Ваш первый вопрос несколько неоднозначен, поскольку я не уверен, говорите ли вы об управлении внешним видом индикатора выполнения или о характере отображаемого прогресса.

Природа индикатора прогресса управляется его значением и опцией mode (индикаторы прогресса determinate отличаются от индикаторов indeterminate; первые управляются через value, вторые просто показывают, что «что-то происходит»).

Внешний вид индикатора выполнения определяется общей темой. В Windows и Mac OS X темой по умолчанию является системная тема, означающая, что индикатор выполнения будет выглядеть нативным, что бы это ни было. В последнее время я не экспериментировал с темами в Linux, поэтому забыл, как они там выглядят; переключать темы с помощью:

# Switch to the included 'clam' theme
s = ttk.Style()
s.theme_use('clam')
person Donal Fellows    schedule 06.11.2012
comment
Я имею в виду внешний вид индикатора выполнения, и я знаю, как изменить тему, но я так и не смог найти изменение внешнего вида в теме, я нахожусь в окнах, и мне нравится тема xpnative, я бы хотел чтобы узнать, есть ли способ настроить стиль? Если я использую: s=ttk.Style() s.layout('TProgressbar') (как сказано в учебнике по документации) для получения элементов стиля progressbar, он говорит, что макет TProgressabr не найден, поэтому я все равно не могу найти поменять фон? Я нашел wiki.tcl.tk/20059, где изменили цвет лица панели, но я - person jbaldwin; 06.11.2012