Python 如何更改Tkinter ScrolledText小部件的滚动条颜色?
我正在Tkinter GUI中使用模块ScrolledText 我希望更改ScrolledText小部件中包含的滚动条的颜色,但我遇到了一些困难 根据文档,我的语法是正确的Python 如何更改Tkinter ScrolledText小部件的滚动条颜色?,python,tkinter,colors,scrollbar,tkinter-scrolledtext,Python,Tkinter,Colors,Scrollbar,Tkinter Scrolledtext,我正在Tkinter GUI中使用模块ScrolledText 我希望更改ScrolledText小部件中包含的滚动条的颜色,但我遇到了一些困难 根据文档,我的语法是正确的 Box = ScrolledText(root) Box.vbar.config(troughcolor = 'red', bg = 'blue') Box.pack() 但是,滚动条仍为标准灰色 我知道语法是正确的,因为做其他事情,例如: Box.vbar.config(cursor = 'target') …
Box = ScrolledText(root)
Box.vbar.config(troughcolor = 'red', bg = 'blue')
Box.pack()
但是,滚动条仍为标准灰色
我知道语法是正确的,因为做其他事情,例如:
Box.vbar.config(cursor = 'target')
…工作完全正常
但是,尝试更改浮雕、边框宽度或颜色似乎没有任何效果。
为什么会这样
规格:
Python 2.7.1
编程
视窗7
IDLETk Scrollbar小部件vbar是Windows中的本机滚动条。其外观取决于Windows主题。如果有问题,考虑切换工具包;我知道PyQt4将允许您在Windows上设置滚动条的样式。Tk scrollbar小部件vbar是Windows中的本机滚动条。其外观取决于Windows主题。如果有问题,考虑切换工具包;我知道PyQt4可以让您在Windows上设置滚动条的样式。从我所读到的内容来看,在Windows上设置滚动条的格式非常困难。下面是我编写的滚动条程序的一些代码。我正在尝试开发一些应该有这些选项的软件,但在我看来,这就像是一个小部件的许多代码,其主要目的是Tkinter做得更好。但是,该程序应允许您将图像插入箭头、槽和滑块,以及更改其颜色
from tkinter import *
class App:
def __init__(self):
self.t = Text(root)
self.t.place(x = 50,y = 50,width = 400,height = 400)
for i in range(300):
self.t.insert(END,str(i))
self.t.insert(END,"\n")
self.c = Canvas(root)
self.c.place(x = 450,y = 50,width = 20,height = 400)
self.trough = Canvas(self.c,bg = "red")
self.slider = Label(self.c,bg = "grey")
self.slidery = 20
self.sliderh = 200
self.trough.place(x = 0,y = 20,width = 20,height = 360)
self.slider.place(x = 0,y = 20,width = 20,height = 200)
self.up = Label(self.c,bg = "purple")
self.down = Label(self.c,bg = "purple")
self.up.place(x = 0,y = 0,width = 20,height = 20)
self.down.place(x = 0,y = 380,width = 20,height = 20)
self.up.bind("<Button-1>",self.up_view)
self.down.bind("<Button-1>",self.down_view)
self.slider.bind("<Button-1>",self.get_slider)
self.slider.bind("<B1-Motion>",self.move_slider)
self.slider.bind("<ButtonRelease-1>",self.release_slider)
self.trough.bind("<Button-1>",self.next_page)
self.config_slider()
def next_page(self,event):
y = event.y
top = self.slidery - 20
bottom = self.slidery + self.sliderh - 20
coords = self.get_coords()
if y < top:
self.up_page(coords)
if y > bottom:
self.down_page(coords)
def up_page(self,coords):
up = -(coords[1] - coords[0])
self.t.yview(SCROLL,-1,"pages")
self.pos_slider()
def down_page(self,coords):
down = coords[1] - coords[0]
self.t.yview(SCROLL,1,"pages")
self.pos_slider()
def pos_slider(self):
coords = self.get_coords()
self.slidery = (coords[0]/coords[2] * 360) + 20
self.slider.place(y = self.slidery)
def config_slider(self):
coords = self.get_coords()
top = coords[0]
bottom = coords[1]
last = coords[2]
last -= 1
if bottom-top < last:
f = int((bottom-top)/last * 360)
else:
f = 360
if f < 10:
f = 10
self.sliderh = f
self.slider.place(height = f,y = self.slidery)
def get_coords(self):
root.update()
top = self.t.index("@0,0")
bottom = self.t.index("@0,%d" %self.t.winfo_height())
last = self.t.index(END)
t = top.split(".")
b = bottom.split(".")
l = last.split(".")
top = int(t[0])
bottom = int(b[0])
last = int(l[0])
return [top,bottom,last]
def up_view(self,event):
self.t.yview(SCROLL,-2,"units")
self.pos_slider()
def down_view(self,event):
self.t.yview(SCROLL,2,"units")
self.pos_slider()
def get_slider(self,event):
self.y = event.y_root
self.config_slider()
def move_slider(self,event):
y = event.y_root - self.y
y += self.slidery
if y < 20:
y = 20
if y > 380 - self.sliderh:
y = 380 - self.sliderh
self.slider.place(y = y)
self.move_text(y)
def move_text(self,y):
coords = self.get_coords()
y1 = 360 - self.sliderh
if y1 != 0:
prop = (coords[1]-coords[0])/coords[2]
prop1 = 1-prop
prop2 = (y-20)/prop1
f = prop2/360 * prop1
self.t.yview(MOVETO,f)
def release_slider(self,event):
y = event.y_root - self.y + self.slidery
if y < 20:
y = 20
if y > 380 - self.sliderh:
y = 380 - self.sliderh
self.slidery = y
self.slider.place(y = y)
self.move_text(y)
self.config_slider()
root = Tk()
root.geometry("500x500")
app = App()
root.mainloop()
据我所知,在Windows上设置滚动条的格式非常困难。下面是我编写的滚动条程序的一些代码。我正在尝试开发一些应该有这些选项的软件,但在我看来,这就像是一个小部件的许多代码,其主要目的是Tkinter做得更好。但是,该程序应允许您将图像插入箭头、槽和滑块,以及更改其颜色
from tkinter import *
class App:
def __init__(self):
self.t = Text(root)
self.t.place(x = 50,y = 50,width = 400,height = 400)
for i in range(300):
self.t.insert(END,str(i))
self.t.insert(END,"\n")
self.c = Canvas(root)
self.c.place(x = 450,y = 50,width = 20,height = 400)
self.trough = Canvas(self.c,bg = "red")
self.slider = Label(self.c,bg = "grey")
self.slidery = 20
self.sliderh = 200
self.trough.place(x = 0,y = 20,width = 20,height = 360)
self.slider.place(x = 0,y = 20,width = 20,height = 200)
self.up = Label(self.c,bg = "purple")
self.down = Label(self.c,bg = "purple")
self.up.place(x = 0,y = 0,width = 20,height = 20)
self.down.place(x = 0,y = 380,width = 20,height = 20)
self.up.bind("<Button-1>",self.up_view)
self.down.bind("<Button-1>",self.down_view)
self.slider.bind("<Button-1>",self.get_slider)
self.slider.bind("<B1-Motion>",self.move_slider)
self.slider.bind("<ButtonRelease-1>",self.release_slider)
self.trough.bind("<Button-1>",self.next_page)
self.config_slider()
def next_page(self,event):
y = event.y
top = self.slidery - 20
bottom = self.slidery + self.sliderh - 20
coords = self.get_coords()
if y < top:
self.up_page(coords)
if y > bottom:
self.down_page(coords)
def up_page(self,coords):
up = -(coords[1] - coords[0])
self.t.yview(SCROLL,-1,"pages")
self.pos_slider()
def down_page(self,coords):
down = coords[1] - coords[0]
self.t.yview(SCROLL,1,"pages")
self.pos_slider()
def pos_slider(self):
coords = self.get_coords()
self.slidery = (coords[0]/coords[2] * 360) + 20
self.slider.place(y = self.slidery)
def config_slider(self):
coords = self.get_coords()
top = coords[0]
bottom = coords[1]
last = coords[2]
last -= 1
if bottom-top < last:
f = int((bottom-top)/last * 360)
else:
f = 360
if f < 10:
f = 10
self.sliderh = f
self.slider.place(height = f,y = self.slidery)
def get_coords(self):
root.update()
top = self.t.index("@0,0")
bottom = self.t.index("@0,%d" %self.t.winfo_height())
last = self.t.index(END)
t = top.split(".")
b = bottom.split(".")
l = last.split(".")
top = int(t[0])
bottom = int(b[0])
last = int(l[0])
return [top,bottom,last]
def up_view(self,event):
self.t.yview(SCROLL,-2,"units")
self.pos_slider()
def down_view(self,event):
self.t.yview(SCROLL,2,"units")
self.pos_slider()
def get_slider(self,event):
self.y = event.y_root
self.config_slider()
def move_slider(self,event):
y = event.y_root - self.y
y += self.slidery
if y < 20:
y = 20
if y > 380 - self.sliderh:
y = 380 - self.sliderh
self.slider.place(y = y)
self.move_text(y)
def move_text(self,y):
coords = self.get_coords()
y1 = 360 - self.sliderh
if y1 != 0:
prop = (coords[1]-coords[0])/coords[2]
prop1 = 1-prop
prop2 = (y-20)/prop1
f = prop2/360 * prop1
self.t.yview(MOVETO,f)
def release_slider(self,event):
y = event.y_root - self.y + self.slidery
if y < 20:
y = 20
if y > 380 - self.sliderh:
y = 380 - self.sliderh
self.slidery = y
self.slider.place(y = y)
self.move_text(y)
self.config_slider()
root = Tk()
root.geometry("500x500")
app = App()
root.mainloop()
tkColorChooser模块也存在类似的问题。*.askcolortle=给我看看!窗口不会显示新标题,而是默认为“颜色”。tkColorChooser模块也存在类似问题。*.askcolortle=给我看看!窗口不会显示新标题,而是默认为“颜色”。如果不能使用这些参数,为什么会存在这些参数?D:我想是因为它们在Windows以外的其他环境中工作。如果不能使用,为什么会存在这样的参数?D:我想是因为它们在Windows以外的其他环境下工作。你能提供一个链接到你写这篇文章时使用的文档吗?我也有同样的想法,我想为tkinter写我自己的滚动条。你能提供一个链接到你用来写这篇文章的文档吗?我在同一条船上,想为tkinter写我自己的滚动条。