2017-01-24 32 views
0

私はGUIアプリケーションを使ってデータベースからデータを取り出し、ツリービューに表示します。しかし、問題は、私のツリービューは約20列あり、それは多くの方法です。私はアプリケーション全体が自分の画面に収まらないということを意味します。tkinterでtreeviewの目的の列をスクロールする方法

最初は2〜3列だけを表示し、残りの列をスクロールバーで表示します。

最初の3列を表示するのに "displaycolumns"オプションを使用していますが、スクロールバーも作成しましたが、残りの列をスクロールバーで表示する方法がわかりません。

後は私がtkFont

としてTkinterのインポートのFileDialog 輸入tkinter.fontからTkinterをインポートTTK 輸入openpyxl からTK としてそれを

輸入のTkinterを簡素化するために、ボタンの方法およびデータベースの機能を削除して、私のコードです

class MainWindow(tk.Tk): 
    def __init__(self,*args,**kwargs): 
    tk.Tk.__init__(self,*args,**kwargs) 

    #Creating Geometry Of the window 
    #self.geometry("500x500+0+0") 
    self.title("Test Software") 

    #Creating Labels 

    self.agreement_number_label = tk.Label(text="Agreement Number") 
    self.area_office_label = tk.Label(text="Area office") 
    self.branch_label = tk.Label(text="Branch") 
    self.customer_name_label = tk.Label(text="Customer Name") 
    self.model_label = tk.Label(text="Model") 
    self.registered_number_label = tk.Label(text="Registered Number") 
    self.engine_number_label = tk.Label(text="Engine Number") 
    self.chasis_number_label = tk.Label(text="Chasis Number") 
    self.make_label = tk.Label(text="Make") 

    #creating entry fields variables 

    self.agreement_number = tk.StringVar() 
    self.area_office = tk.StringVar() 
    self.branch = tk.StringVar() 
    self.customer_name = tk.StringVar() 
    self.model = tk.StringVar() 
    self.registered_number = tk.StringVar() 
    self.engine_number = tk.StringVar() 
    self.chasis_number = tk.StringVar() 
    self.make = tk.StringVar() 

    #creating Entry Fields 

    self.agreement_number_entry = tk.Entry(textvariable = self.agreement_number) 
    self.area_office_entry = tk.Entry(textvariable = self.area_office) 
    self.branch_entry = tk.Entry(textvariable = self.branch) 
    self.customer_name_entry = tk.Entry(textvariable = self.customer_name) 
    self.model_entry = tk.Entry(textvariable = self.model) 
    self.registered_number_entry = tk.Entry(textvariable = self.registered_number) 
    self.engine_number_entry = tk.Entry(textvariable = self.engine_number) 
    self.chasis_number_entry = tk.Entry(textvariable = self.chasis_number) 
    self.make_entry = tk.Entry(textvariable = self.make) 

    #Adding Labels and Entry Fields to the grid 
    #1st Row Fields 
    self.agreement_number_label.grid(row=0,column=0,pady=(25,0),sticky="w",padx=(20,0)) 
    self.agreement_number_entry.grid(row=0,column=1,pady=(25,0),sticky="w") 
    self.area_office_label.grid(row=0,column=2,pady=(25,0),sticky="w") 
    self.area_office_entry.grid(row=0,column=3,pady=(25,0),sticky="w") 
    self.branch_label.grid(row=0,column=4,pady=(25,0),sticky="w") 
    self.branch_entry.grid(row=0,column=5,pady=(25,0),sticky="w",padx=(0,20)) 
    #2nd row fields 
    self.customer_name_label.grid(row=1,column=0,sticky="w",padx=(20,0)) 
    self.customer_name_entry.grid(row=1,column=1,sticky="w") 
    self.model_label.grid(row=1,column=2,sticky="w") 
    self.model_entry.grid(row=1,column=3,sticky="w") 
    self.registered_number_label.grid(row=1,column=4,sticky="w") 
    self.registered_number_entry.grid(row=1,column=5,sticky="w",padx=(0,20)) 
    #3rd Row Fields 
    self.chasis_number_label.grid(row=2,column=0,sticky="w",padx=(20,0)) 
    self.chasis_number_entry.grid(row=2,column=1,sticky="w") 
    self.engine_number_label.grid(row=2,column=2,sticky="w") 
    self.engine_number_entry.grid(row=2,column=3,sticky="w") 
    self.make_label.grid(row=2,column=4,sticky="w") 
    self.make_entry.grid(row=2,column=5,sticky="w",padx=(0,20)) 

    #Creating a search button 
    self.search_button = tk.Button(text = "Search Record",width=25) 

    #Adding the Search Button into the grid 
    self.search_button.grid(row=3,column=0,columnspan=6,pady=10) 

    #Adding a Seperator to the grid 
    ttk.Separator(orient="horizontal").grid(row=4,columnspan=6,sticky="ew") 


    #Creating A Treeview 
    self.treeview = ttk.Treeview(height=6) 
    self.treeview['columns'] = ("One","Two","Three") 
    self.treeview.column('#0',width=100) 
    self.treeview.heading("#0", text="Testing") 
    self.treeview.heading("One", text="Column A") 
    self.treeview.heading("Two", text="Column B") 
    self.treeview.heading("Three", text="Column C") 
    self.treeview.grid(row=5,rowspan=5,column=0,columnspan=4,pady=(10,0)) 

    #Adding Default Data to The Treeview 
    for i in range(10): 
     self.treeview.insert("" , "end", text="Line "+str(i), values=("1A","1b")) 

    #Creating a treeview scrollbar 
    self.vertical_scrollbar = tk.Scrollbar(orient='vertical') 
    self.horizontal_scrollbar = tk.Scrollbar(orient='horizontal') 

    #adding scrollbars to the grid 
    self.vertical_scrollbar.grid(row=5,column=4,rowspan=6) 
    self.horizontal_scrollbar.grid(row=10,column=0,columnspan=4) 

    #configuring scrolls to treeview 
    self.horizontal_scrollbar.configure(command=self.treeview.xview) 
    self.vertical_scrollbar.configure(command=self.treeview.yview) 

    #configuring treeview to Scrollbar 
    self.treeview.configure(yscrollcommand=self.vertical_scrollbar.set) 
    self.treeview.configure(xscrollcommand=self.horizontal_scrollbar.set) 

    #Creating buttons 
    self.view_all_record_btn = tk.Button(text="View All Records",width=15) 
    self.add_record_btn = tk.Button(text="Add Record",width=15) 
    self.edit_record_btn = tk.Button(text="Edit Record",width=15) 
    self.delete_record_btn = tk.Button(text="Delete Record",width=15) 
    self.upload_file_btn = tk.Button(text="Upload File",width=15) 

    #Adding Buttons to the Grid 
    self.view_all_record_btn.grid(row=5,column=5,pady=(10,0)) 
    self.add_record_btn.grid(row=6,column=5) 
    self.edit_record_btn.grid(row=7,column=5) 
    self.delete_record_btn.grid(row=8,column=5) 
    self.upload_file_btn.grid(row=9,column=5,pady=(0,20)) 

    root = MainWindow() 
    root.mainloop() 

ここで約20列を追加する必要がありますが、残りの列はスクロールバーでのみ表示され、列のスクロールバーはフィンでのみ表示されます。 E私は、列

おかげ

+0

2つのツリービューを作成 - 可視列の1スクロールバーと第二のすべての時間を、。 – furas

+0

申し訳ありませんが、私はそれを得ていませんでした。すべての列が表示されているツリービューを作成した場合、それは適合しません –

答えて

0

ようこそためにそれを行う方法を見つけ出すことはできません。あなたの問題はレイアウトマネージャの設定に依存していると思います。グリッドシステムでは、関連するフレームの.rowconfigure.columnconfigureの設定を調整して、私が望むものを達成しました。もしそれが正しいとすれば、2-3の列を最初に表示してから、xscrollbarを使って1つのツリービューにすべてが必要なときに他の '隠れた' 17〜18列を表示できるはずです。

ところで、あなたの質問にmvceコードを含めると、コミュニティーがより効果的に役立つことがあります。これは、問題を再現し、他の人があなたを助けるのに十分な、コードの最小化されたバージョンです。

+0

返信ありがとうと申し訳ありませんが、ここではrowconfigureやcolumnconfigureがどのように役立つのか分かりませんし、とにかく私のコードを質問に追加しました –

+0

@AnchalBhargava You既存のコードの大部分ではなく、問題を再現できる最小限のコードを共有することを目指すべきです。今は助けられない。 –

0

@Sun Bearの回答とこのwebsiteに基づいて、私はTreeView結合水平スクロールバーのバージョンを実装しました。これは本当に.rowconfigure. columnconfigureの問題です。以下のサンプルコードを実行すると、その動作を知ることができます。また、実行結果を下の画像で見ることができます。

result image link

try: 
    from tkinter import * 
    from tkinter import ttk 
except ImportError: 
    from Tkinter import * 
    from Tkinter import ttk 

root = Tk() 

content = ttk.Frame(root, padding=(3,3,12,12)) 

# initialize a TreeView 
myTreeView = ttk.Treeview(content) 
myTreeView["columns"] = ("Index", "Value", "Price", "LAST_PRICE") 
myTreeView.column("Index", stretch=False, width=150) 
myTreeView.column("Value", stretch=False, width=100) 
myTreeView.column("Price", stretch=False, width=100) 
myTreeView.column("LAST_PRICE", stretch=False, width=100) 
myTreeView.heading("Index", text="Index") 
myTreeView.heading("Value", text="Value") 
myTreeView.heading("Price", text="Price") 
myTreeView.heading("LAST_PRICE", text="Last Price") 

# attach a Horizontal (x) scrollbar to the frame 
treeXScroll = ttk.Scrollbar(content, orient=HORIZONTAL) 
treeXScroll.configure(command=myTreeView.xview) 
myTreeView.configure(xscrollcommand=treeXScroll.set) 

# initialize the Label and Entry 
namelbl = ttk.Label(content, text="Name") 
name = ttk.Entry(content) 

# initialize Checkbuttons 
onevar = BooleanVar() 
twovar = BooleanVar() 
threevar = BooleanVar() 
onevar.set(True) 
twovar.set(False) 
threevar.set(True) 
one = ttk.Checkbutton(content, text="One", variable=onevar, onvalue=True) 
two = ttk.Checkbutton(content, text="Two", variable=twovar, onvalue=True) 
three = ttk.Checkbutton(content, text="Three", variable=threevar, onvalue=True) 

# initialize Buttons 
ok = ttk.Button(content, text="Okay") 
cancel = ttk.Button(content, text="Cancel") 

# set position of all above objects by grid 
content.grid(column=0, row=0, sticky=(N, S, E, W)) 
myTreeView.grid(column=0, row=0, columnspan=3, rowspan=2, sticky=(N, S, E, W)) 
treeXScroll.grid(column=0, row=3, columnspan=3, sticky=W + E) 
namelbl.grid(column=3, row=0, columnspan=2, sticky=(N, W), padx=5) 
name.grid(column=3, row=1, columnspan=2, sticky=(N, E, W), pady=5, padx=5) 
one.grid(column=0, row=4) 
two.grid(column=1, row=4) 
three.grid(column=2, row=4) 
ok.grid(column=3, row=4) 
cancel.grid(column=4, row=4) 

# Handling Resize 
root.columnconfigure(0, weight=1) 
root.rowconfigure(0, weight=1) 
content.columnconfigure(0, weight=3) 
content.columnconfigure(1, weight=3) 
content.columnconfigure(2, weight=3) 
content.columnconfigure(3, weight=1) 
content.columnconfigure(4, weight=1) 
content.rowconfigure(1, weight=1) 

# run UI 
root.mainloop() 
関連する問題