2017-09-08 5 views
0

私は本当にtkinterには新しく、何をしようとしているのはtkinterフレームに出力を表示することです。他の方法を知らないため、ラベルを文字列(表示したい出力)に設定してから、ラベルをフレームにパックしようとしています。これは私の唯一の問題は、フォーマットされている方法です。文字列は、以下のようなことになっている: enter image description heretkinterで多列の文字列をうまくフォーマットする方法

をしかし、私はTkinterの中にそれを置くときには、次のようになります。 enter image description here

はTkinterのに出力文字列にこのまたはより良い方法を修正する代わりにするためにとにかくありラベルを使用して 私は(私が必要として、私は、各列のサイズを変更することができるようにgetPrettyString機能がELIF年代非常に多くを持っている理由は)その方法は、次のようになります文字列を取得するために使用しています機能:

def getPrettyString(record): 
    string = "" 
    for i in range(len(record)): 
     if i == 0: 
      string += '{:<25}'.format(record[i]) 
     elif i == 1: 
      string += '{:<25}'.format(record[i]) 
     elif i == 2: 
      string += '{:<25}'.format(record[i]) 
     elif i == 3: 
      string += '{:<25}'.format(record[i]) 
     elif i == 4: 
      string += '{:<25}'.format(record[i]) 
     elif i == 5: 
      string += '{:<25}'.format(record[i]) 
     elif i == 6: 
      string += '{:<25}'.format(record[i]) 
     elif i == 7: 
      string += '{:<25}'.format(record[i]) 
return string 


def writeTable(table): 
    record = '' 
    header = ["ID", "Assignment Name", "Submission Date", "Time of submission", "Group Assignment", "Group comments", 
       "Assignment Text", "Marks"] 
    record += getPrettyString(header) 
    record += '\n' 

    for team in table: 
     record += getPrettyString(team) 
     record += '\n' 
    return record 

マイTkinterのコードは次のようになります。

class View_marks_student: 
    def __init__(self, master): 
     master.geometry('1080x1920') 
     master.title("Student Marks Page") 
     string = StringVar() 
     string.set(writeTable(table_details)) 
     self.label = Label(master, textvariable=string, anchor=N, justify=LEFT) 
     self.label.pack(anchor=NW, fill=BOTH, expand=1) 

すべてのヘルプは.grid()を使用することがずっと簡単で、非常に多くよく見える傾向があり、テーブルを描画するための

答えて

1

を理解されるであろう。だから、私たちはテーブルの行を表現するために最初forループ、テーブルの次の行にi刻みの各増分を作成

from tkinter import * 

root = Tk() 

header = ["ID", "Assignment Name", "Submission Date", "Time of submission", "Group Assignment", "Group comments", "Assignment Text", "Marks"] 

for i in range(10): 
    Grid.rowconfigure(root, i, weight=1) 
    if i == 0: 
     for c in range(len(header)): 
      Grid.columnconfigure(root, c, weight=1) 
      Label(root, text=header[c], borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W) 
    else: 
     for c in range(len(header)): 
      Grid.columnconfigure(root, c, weight=1) 
      Label(root, text=header[c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W) 

は、以下の私の例を参照してください。次に、特定の行の各列の各セルを表すテーブルの各行(インクリメントi)にネストされたforループを作成します。

行「0」にアクセスしてヘッダーを開始し、ヘッダーのリストを繰り返して、現在の行の各列の各セル値を印刷し、次の行に移動します。

我々はまた、1にそれぞれの行と列のweightを設定するrowconfigurecolumnconfigureのようないくつかの派手な操作を使用し、これは、細胞がそれらに割り当てられた利用可能なスペースを埋めるために拡大しており、各labelを行うことによって、我々はstickyを作成することを意味しますすべての方向(N+S+E+W)では、割り当てられたスペースに合わせて境界線も拡大されます。

テーブルに入力するデータセットがある場合は、list ofリストを作成し、最初の反復値が行で2番目が列である出力データを指定できます。

ので、この:

for c in range(len(header)): 
    Grid.columnconfigure(root, c, weight=1) 
    Label(root, text=header[c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W) 

は、この(datalist秒のあなたのlistです)になるであろう:

for c in range(len(header)): 
    Grid.columnconfigure(root, c, weight=1) 
    Label(root, text=data[i][c]+" Row:"+str(i)+", Col:"+str(c), borderwidth=1, relief="solid").grid(column=c, row=i, sticky=N+S+E+W) 
+0

ヨ、おかげで私は必要な正確に何をそんなに男は、文字通り私を救いました割り当て、感謝の男 –

+0

これがあなたの質問に答えるなら、それをあなたの受け入れられた答えとしてマークしてください。 –

関連する問題