2016-11-02 8 views
0

У меня была небольшая проблема с моими полосами прокрутки. Функционально все работает нормально. Появляются полосы прокрутки, реагируют на вставку в текстовые виджеты и прокрутки. Но сразу после запуска приложения кнопки со стрелками всех полос прокрутки отображаются серым цветом до тех пор, пока я не изменю размер окна приложения. Есть ли что-то в основном неправильное для моих кадров в настройке сетки? Я разделил на четверти, верхние левые (UL), верхний правый (UR), нижний левый (LL), нижний правый (LR).Python Tkinter scrollbar стрелки серого цвета

import Tkinter 
from Tkinter import * 

class findhash_tk(Tkinter.Tk): 

    def __init__(self, parent): 

     Tkinter.Tk.__init__(self, parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 

     self.frameUL = Tkinter.LabelFrame(self, text="Upper left") 
     self.frameUL.grid(row=0, column=0, sticky=W+E+N+S, padx=2, pady=2) 

     self.frameUR = Tkinter.LabelFrame(self, text="Upper right") 
     self.frameUR.grid(row=0, column=1, sticky=W+E+N+S, padx=2, pady=2) 

     self.frameLL = Tkinter.LabelFrame(self, text="Lower left") 
     self.frameLL.grid(row=1, column=0, sticky=W+E+N+S, padx=2, pady=2) 

     self.frameLR = Tkinter.LabelFrame(self, text="Lower right") 
     self.frameLR.grid(row=1, column=1, sticky=W+E+N+S, padx=2, pady=2) 

     self.scrollbarUR = Tkinter.Scrollbar(self.frameUR, orient='vertical') 
     self.scrollbarUR.grid(row=0, column=1, sticky=N+S)  

     self.textBoxUR = Tkinter.Text(self.frameUR) 
     self.textBoxUR.config(yscrollcommand=self.scrollbarUR.set) 
     self.textBoxUR.grid(row=0, column=0, sticky=W+E+N+S) 

     self.scrollbarUR.config(command=self.textBoxUR.yview) 

     self.scrollbarLLV = Tkinter.Scrollbar(self.frameLL, orient='vertical') 
     self.scrollbarLLV.grid(row=0, column=1, sticky=N+S) 

     self.scrollbarLLH = Tkinter.Scrollbar(self.frameLL, orient='horizontal') 
     self.scrollbarLLH.grid(row=1, column=0, sticky=W+E) 

     self.textBoxLL = Tkinter.Text(self.frameLL) 
     self.textBoxLL.config(wrap="none", yscrollcommand=self.scrollbarLLV.set, xscrollcommand=self.scrollbarLLH.set) 
     self.textBoxLL.grid(row=0, column=0, sticky=W+E+N+S) 

     self.scrollbarLLV.config(command=self.textBoxLL.yview) 
     self.scrollbarLLH.config(command=self.textBoxLL.xview) 

     self.scrollbarLRV = Tkinter.Scrollbar(self.frameLR, orient='vertical') 
     self.scrollbarLRV.grid(row=0, column=1, sticky=N+S) 

     self.scrollbarLRH = Tkinter.Scrollbar(self.frameLR, orient='horizontal') 
     self.scrollbarLRH.grid(row=1, column=0, sticky=W+E) 

     self.textBoxLR = Tkinter.Text(self.frameLR) 
     self.textBoxLR.config(wrap="none", yscrollcommand=self.scrollbarLRV.set, xscrollcommand=self.scrollbarLRH.set) 
     self.textBoxLR.grid(row=0, column=0, sticky=W+E+N+S) 

     self.scrollbarLRV.config(command=self.textBoxLR.yview) 
     self.scrollbarLRH.config(command=self.textBoxLR.xview) 

     for x in range(50): 
      self.textBoxUR.insert(END, str(x) + "\n") 

     for x in range(50): 
      self.textBoxLL.insert(END, str(x) + "\n") 

     for x in range(50): 
      self.textBoxLR.insert(END, str(x) + "\n") 

if __name__ == "__main__": 
    app = findhash_tk(None) 
    app.title('Test App') 
    app.mainloop() 

Initial state of gui

ответ

0

воткнуть self.update() после:

self.textBoxUR.grid(row=0, column=0, sticky=W+E+N+S) 

Как ни странно дальше не будет работать (некоторые скроллбары будут неактивны, или левым нижним горизонтальным будут окрашены в то время как он не должен» т). Это исправит его для вас, но это похоже на ошибку.

EDIT Как указано в OP, это не является согласованным и странным в любом случае. Обходной, после инициализации() поставил:

self.wm_geometry("+4000+4000") 
self.after(500,lambda:self.wm_geometry("+10+10")) 

Это грязная, но заставляет обновления в окнах, помещая окно из экрана (если экран больше, чем 4000 пикселей вау, но вы можете увеличить) и через полсекунды он возвращается. Это похоже на странную проблему, а на Linux не бывает (хотя цвет greyish всегда).

+0

Я попытался поставить 'self.update()' ниже, который не работал. Ввод туда, где вы предлагаете, все еще оставляет «LL» горизонтальную полосу прокрутки стрелки серого цвета. – ManuMeadow

+0

Обе горизонтальные полосы прокрутки (внизу внизу справа?) Должны быть серыми - прокручивать нечего. Вы хотите изменить это поведение? – kabanus

+0

Нет, совсем нет. Но это противоречиво, с вашим решением все стрелки показаны черными, а также горизонтальной полосой нижнего правого. Только нижний левый остается серым. – ManuMeadow