[PYTHON] ttk treeview : 대체 행 색상
PYTHONttk treeview : 대체 행 색상
대체 행에 다른 배경색을 갖도록 트리 뷰 위젯의 스타일을 설정할 수 있습니까? 예를 들어 행 1,3,5는 흰색 배경을, 행 2,4,6은 연한 파란색 - 회색 배경을가집니다.
눈금 선을 설정하고 싶습니다.
해결법
-
==============================
1.나는 몇 달 전에이 같은 문제를 안고있었습니다.
나는 몇 달 전에이 같은 문제를 안고있었습니다.
tk docs에서 :
You can assign a list of tags to each item using the "tags" item configuration option (again, when creating the item or later on). Tag configuration options can then be specified, which will then apply to all items having that tag.
기본적으로 모든 홀수 번호 행에 하나의 태그를 적용하고 짝수 번호 행에 다른 태그를 적용한 다음 태그를 구성합니다.
트리 뷰 안에 항목을 만들 때 태그를 추가하십시오.
tree.insert('', 'end', text = 'your text', tags = ('oddrow',))
이 코드는 tree에 요소를 만들고 tags 인수는 'oddrow'태그를 요소에 할당합니다.
'oddrow'및 'evenrow'태그로 모든 요소를 만든 후에는 태그에 색상을 지정할 수 있습니다.
tree.tag_configure('oddrow', background='orange') tree.tag_configure('evenrow', background='purple')
-
==============================
2.이것은 오래된 질문이지만, 트리를 만든 직후 (즉 항목이 아직 추가되지 않은 경우) 태그를 구성하는 레코드에 대해서도 작동합니다. 항목이 나중에 삽입되면 'oddrow'또는 'evenrow'태그에 적절한 배경색이 부여됩니다.
이것은 오래된 질문이지만, 트리를 만든 직후 (즉 항목이 아직 추가되지 않은 경우) 태그를 구성하는 레코드에 대해서도 작동합니다. 항목이 나중에 삽입되면 'oddrow'또는 'evenrow'태그에 적절한 배경색이 부여됩니다.
-
==============================
3.이것은 SQL 데이터베이스를 만드는 것입니다. 그런 다음 db에서 listbox로 몇 고객을로드합니다. 그런 다음 새로운 색상 테스트 버튼을 클릭하여 홀수 행에 대한 색상을 변경하여 표시 할 수 있습니다. 이것은 sqlalchemy가 모듈로 설치되어있는 한 실행 가능합니다.
이것은 SQL 데이터베이스를 만드는 것입니다. 그런 다음 db에서 listbox로 몇 고객을로드합니다. 그런 다음 새로운 색상 테스트 버튼을 클릭하여 홀수 행에 대한 색상을 변경하여 표시 할 수 있습니다. 이것은 sqlalchemy가 모듈로 설치되어있는 한 실행 가능합니다.
from Tkinter import * import ttk from sqlalchemy import Column, ForeignKey, Integer, String, Text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker base = declarative_base() class Customer(base): __tablename__='Customer_Details' Id = Column(Integer, primary_key=True) first_name = Column(String(64)) last_name = Column(String(64)) class DB_connection(object): def __enter__(variable): variable.engine = create_engine("sqlite:///example.db") base.metadata.bind = variable.engine variable.DBSession = sessionmaker(bind=variable.engine) variable.Session = variable.DBSession variable.session = variable.Session() return variable def __exit__(variable, exc_type, exc_val, exc_tb): variable.session.commit() variable.session.close() class Test(Frame): def __init__(self): Frame.__init__(self) self.pack() self.listbox() self.buttons() def listbox(self): global new_customer_lb scrollbar = Scrollbar(self, orient="vertical") new_customer_lb = ttk.Treeview(self, columns=('ID','First Name','Last Name')) new_customer_lb['show']='headings' new_customer_lb.heading('#1', text= 'ID') new_customer_lb.column('#1', width=50, stretch=NO) new_customer_lb.heading('#2', text= 'First Name') new_customer_lb.column('#2', width=100, stretch=NO) new_customer_lb.heading('#3', text= 'Last Name') new_customer_lb.column('#3', width=100, stretch=NO) new_customer_lb.configure(yscroll = scrollbar.set, selectmode="browse") scrollbar.config(command=new_customer_lb.yview) new_customer_lb.pack() def buttons(self): db = Button(self, text='make DB', command=lambda:self.create_db()) customer = Button(self, text='create customers', command=lambda:self.create_customers()) load = Button(self, text='show customers', command=lambda:self.load_working_customers()) test = Button(self, text='test new colors', command=lambda:self.test_colors()) db.pack() customer.pack() load.pack() test.pack() def create_db(self): print("start create db function") engine = create_engine('sqlite:///example.db') base.metadata.create_all(engine) print("Success create db function") def create_customers(self): print ('Start add customer sql') customer1 = Customer(first_name='first1',last_name='last1') customer2 = Customer(first_name='first2',last_name='last2') customer3 = Customer(first_name='first3',last_name='last3') customer4 = Customer(first_name='first4',last_name='last4') with DB_connection() as DB: DB.session.add_all([customer1,customer2,customer3,customer4]) print ('sucess add customer sql') def load_working_customers(self): new_customer_lb.delete(*new_customer_lb.get_children()) with DB_connection() as DB: for a,b,c in DB.session.query(Customer.Id,Customer.first_name,Customer.last_name).order_by(Customer.Id): new_customer_lb.insert('','end', values=(a,b,c)) def test_colors(self): new_customer_lb.delete(*new_customer_lb.get_children()) ### configure even and odd here new_customer_lb.tag_configure("evenrow",background='white',foreground='black') new_customer_lb.tag_configure("oddrow",background='black',foreground='white') with DB_connection() as DB: ## this loop will take 'a' (Customer.Id) and test if even or odd for a,b,c in DB.session.query(Customer.Id,Customer.first_name,Customer.last_name).order_by(Customer.Id): if a % 2 == 0: new_customer_lb.insert('','end', values=(a,b,c), tags=('evenrow',)) else: new_customer_lb.insert('','end', values=(a,b,c), tags=('oddrow',)) root = Tk() app = Test() app.mainloop()
-
==============================
4.이 모듈은 별도의 모듈 없이도 실행 가능합니다 ... 코드를 혼란에 빠뜨릴 수 있습니다.
이 모듈은 별도의 모듈 없이도 실행 가능합니다 ... 코드를 혼란에 빠뜨릴 수 있습니다.
from Tkinter import * import ttk class Test(Frame): def __init__(self): Frame.__init__(self) self.pack() self.listbox() self.buttons() def listbox(self): global new_customer_lb scrollbar = Scrollbar(self, orient="vertical") new_customer_lb = ttk.Treeview(self, columns=('ID','First Name','Last Name')) new_customer_lb['show']='headings' new_customer_lb.heading('#1', text= 'ID') new_customer_lb.column('#1', width=50, stretch=NO) new_customer_lb.heading('#2', text= 'First Name') new_customer_lb.column('#2', width=100, stretch=NO) new_customer_lb.heading('#3', text= 'Last Name') new_customer_lb.column('#3', width=100, stretch=NO) new_customer_lb.configure(yscroll = scrollbar.set, selectmode="browse") scrollbar.config(command=new_customer_lb.yview) new_customer_lb.pack() def buttons(self): load = Button(self, text='show customers', command=lambda:self.load_working_customers()) test = Button(self, text='test new colors', command=lambda:self.test_colors()) load.pack() test.pack() def load_working_customers(self): new_customer_lb.delete(*new_customer_lb.get_children()) for a in range(0,10): new_customer_lb.insert('','end', values=(a,'first','last')) def test_colors(self): new_customer_lb.delete(*new_customer_lb.get_children()) new_customer_lb.tag_configure("evenrow",background='white',foreground='black') new_customer_lb.tag_configure("oddrow",background='black',foreground='white') for a in range(0,10): if a % 2 == 0: new_customer_lb.insert('','end', values=(a,'first','last'), tags=('evenrow',)) if a % 2 != 0: new_customer_lb.insert('','end', values=(a,'first','last'), tags=('oddrow',)) root = Tk() app = Test() app.mainloop()
from https://stackoverflow.com/questions/7878730/ttk-treeview-alternate-row-colors by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 틸드 단항 연산자 부정으로 numpy bool 배열 (0) | 2018.11.26 |
---|---|
[PYTHON] FTPES - 세션 재사용 필요 (0) | 2018.11.26 |
[PYTHON] 교차로 복잡성 (0) | 2018.11.26 |
[PYTHON] 파이썬에서 비동기 백그라운드 프로세스? (0) | 2018.11.26 |
[PYTHON] 팬더 : 여기서 메모리 누수가 어디 있지? (0) | 2018.11.26 |