2016-09-11 5 views
0

私は単純なtkinterウィンドウのポップアップ(pastebinリンク:http://pastebin.com/kvv0G4rM)を作成しています。私が直面している問題はタイトルメッセージ( "Enter costs")がポップアップするtkinterウィンドウから切り取られていることです。wm_title( "message")がtkinterウィンドウで切り取られていますか?

私はtkinterウィンドウのサイズを変更しようとしましたが、それを中心に移動しました。そのような場合、ラベル、ボタンはすべて画面に完全には入りません。それは私が動的にそれぞれの行を追加する必要がありますように私は、グリッドを使用しています。この

The current scenario of the lables and buttons

のように見えます

(高さや大きコメントや.geometry関数呼び出しをコメントアウトしてください)「を追加経費 "ボタンを押す。関数(add_row)を参照してください。インデックス変数は、新しいエントリフィールドが挿入される行の数を保持します。

この質問は次のようになります - What controls automated window resizing in Tkinter?

唯一の問題は、私はそれを手動でサイズ変更するとき、私は自動を失うことである - 行動のサイズを変更します。これはtkinterウィンドウの後半の動作に必要です(これは、「経費の追加」ボタンを押して新しいエントリフィールドを追加するときです)。

私は、コードを含む午前: -

self.root = master 
self.root.wm_title("Enter Expenses") 
self.frame = tkinter.Frame(master) 
self.frame.grid() 
self.button = tkinter.Button(self.frame, 
        text="QUIT", fg="red", 
        command=self.exit) 
self.button.grid(row=0,column=0) 
self.slogan = tkinter.Button(self.frame, 
        text="Add Expense", 
        command=self.create_expenseTable) 
self.slogan.grid(row=0,column=1) 

def create_expenseTable(self): 
    global index 
    global expenseReport 
    self.frame.destroy() 
    self.frame = tkinter.Frame() 
    self.frame.grid() 
    tkinter.Label(self.frame,text="Category").grid(row=index,column=0) 
    tkinter.Label(self.frame,text="Amount").grid(row=index,column=1) 
    index+=1 

    self.e1 = tkinter.Entry(self.frame) 
    self.e2 = tkinter.Entry(self.frame) 

    self.e1.grid(row=index, column=0) 
    self.e2.grid(row=index, column=1) 
    index+=1 
    self.create_button() 

def create_button(self): 
    global index 

    self.slogan = tkinter.Button(self.frame, 
        text="Add Expense", 
        command=self.add_row) 
    self.slogan.grid(row=index,column=1) 
    self.submit = tkinter.Button(self.frame,text="Submit Expense",command=self.endFunction) 
    self.submit.grid(row=index,column=0) 

def add_row(self): 
    global index 
    global expenseReport 
    self.slogan.destroy() 
    self.submit.destroy() 
    category = self.e1.get() 
    expense = self.e2.get() 
    self.e1 = tkinter.Entry(self.frame) 
    self.e2 = tkinter.Entry(self.frame) 

    self.e1.grid(row=index,column=0) 
    self.e2.grid(row=index,column=1) 

    index+=1 
    self.create_button() 

add_expenseのすべてのボタンクリックのインデックスインクリメント;新しい行を追加し、ボタンを1行下にシフトします。

私は間違っていますか? ウィンドウのすべての内容が完全にウィンドウ(タイトルバーなど)にフィットし、サイズを変更すると非表示にならないようにしたいと思います。

+0

「タイトルのメッセージ(「経費の入力」)は、「ポップアップするtkinterウィンドウから切断されましたか?カテゴリと金額セクションの両方を表示するはずですが、最初のセクションのみが表示されますか?これは私があなたが上で提供したイメージから理解したものです。 –

+0

イメージを更新しました。最初の画像を確認して、ウィンドウがポップアップしたときに費用を入力する方法を確認してください。 – Echo

+0

ルートウィンドウに '.geometry()'メソッドを使うだけです。たとえば、「500x100」などの値を追加します。最初の1つ(この場合は500)は、ルートウィンドウの幅になります。 –

答えて

0

コメントセクションで説明したように、新しい行関数呼び出しを追加するたびに、tkinterウィンドウの高さと幅が増えました。これにより、tkinterウィンドウサイズの応答性が向上しました。 「費用の追加」ボタンのクリックごとにウィンドウサイズの増加を示すダミーコードを貼り付けています。あらゆる種類のコードレビューコメントは非常に歓迎されます。

try: 
    import Tkinter as tkinter 
except ImportError: 
    import tkinter as tkinter 
import sys 

index = 0 
width = 0 
height = 0 
x=0 
y=0 
class gui: 
    def __init__(self): 
     root = tkinter.Tk() 
     self.initialise_GUI(root) 
     root.mainloop() 

    def initialise_GUI(self,master): 
     global height,width 
     width = 304 
     height = 30 
     self.root = master 
     width_screen = self.root.winfo_screenwidth() 
     height_screen = self.root.winfo_screenheight() 
     x = (width_screen/2)-(width/2) 
     y = (height_screen/2)-(height/2) 
     self.root.geometry('%dx%d+%d+%d' %(width,height,x,y)) 
     self.root.wm_title("Expense Manager") 
     self.frame = tkinter.Frame(master) 
     self.frame.grid() 
     self.button = tkinter.Button(self.frame, 
        text="QUIT", fg="red",width=15, 
        command=self.exit) 
     self.button.grid(row=0,column=0) 
     self.slogan = tkinter.Button(self.frame,width=16, 
        text="Add Expense", 
        command=self.create_expenseTable) 
     self.slogan.grid(row=0,column=1) 
     self.root.protocol("WM_DELETE_WINDOW", self.destroy_application) 

    def exit(self): 
     self.root.destroy() 

    def create_expenseTable(self): 
     global index,x,y,height,width 
     width +=30 
     height +=40 
     self.frame.destroy() 
     self.frame = tkinter.Frame() 
     self.frame.grid() 
     tkinter.Label(self.frame,text="Category").grid(row=index,column=0) 
     tkinter.Label(self.frame,text="Amount").grid(row=index,column=1) 
     index+=1 

     self.e1 = tkinter.Entry(self.frame) 
     self.e2 = tkinter.Entry(self.frame) 

     self.e1.grid(row=index, column=0) 
     self.e2.grid(row=index, column=1) 
     self.root.geometry('%dx%d+%d+%d' %(width,height,x,y)) 
     index+=1 
     self.create_button() 

    def create_button(self): 
     global index 
     global height 
     global index 
     height+=10 

     self.slogan = tkinter.Button(self.frame, 
        text="Add Expense", 
        command=self.add_row) 
     self.slogan.grid(row=index,column=1) 
     self.submit = tkinter.Button(self.frame,text="Submit Expense",command=self.exit) 
     self.submit.grid(row=index,column=0) 

    def add_row(self): 
     global index 
     global expenseReport 
     global x,y,height,width 
     height+=10 
     self.slogan.destroy() 
     self.submit.destroy() 
     category = self.e1.get() 
     expense = self.e2.get() 
     self.e1 = tkinter.Entry(self.frame) 
     self.e2 = tkinter.Entry(self.frame) 
     self.e1.grid(row=index,column=0) 
     self.e2.grid(row=index,column=1) 
     index+=1 
     self.root.geometry('%dx%d+%d+%d' %(width,height,x,y)) 
     self.create_button() 
    """other code logic using category and expense""" 

    def destroy_application(self): 
     self.root.destroy() 
     sys.exit(1) 

if __name__ == "__main__": 
    obj = gui() 
関連する問題