2
def red(): 
    frame3.output_display.config(fg = 'red', font=root.customFont1)
def blue():
    frame3.output_display.config(fg = 'darkblue', font=root.customFont2)
def green():
    frame3.output_display.config(fg = 'darkgreen',font=root.customFont3)
def black():
    frame3.output_display.config(fg = 'black',font=root.customFont4)


from tkinter import *
from tkinter import ttk
import tkinter.font
from tkinter.scrolledtext import ScrolledText

root = Tk()
root.title("Change Text")
root.geometry('700x500')
# change font size and family: not used currently because of resizing issue
root.customFont1 = tkinter.font.Font(family="Handwriting-Dakota", size=12)
root.customFont2 = tkinter.font.Font(family="Comic sans MS", size=14)
root.customFont3 = tkinter.font.Font(family="Script MT", size=16)
root.customFont4 = tkinter.font.Font(family="Courier", size=10)

# FRAME 3
frame3 = LabelFrame(root,  background = '#EBFFFF', borderwidth = 2, text = 'text entry and display frame', fg = 'purple',bd = 2, relief = FLAT, width = 75, height = 40)
frame3.grid(column = 2, row = 0, columnspan = 3, rowspan = 6, sticky = N+S+E+W) 
#frame3.grid_rowconfigure(0, weight=0)
#frame3.grid_columnconfigure(0, weight=0)
frame3.grid_propagate(True)


frame3.output_display = ScrolledText(frame3, wrap = WORD)
frame3.output_display.pack( side = TOP, fill = BOTH, expand = True )
frame3.output_display.insert('1.0', 'the text should appear here and should wrap at character forty five', END)
#frame3.output_display.config(state=DISABLED) # could be used to prevent modification to text (but also prevents load new file)

# draws all of the buttons,
ttk.Style().configure("TButton", padding=6, relief="flat",background="#A52A2A", foreground='#660066')
names_colour=(('Red',red),('Blue',blue),('Green',green),('Black',black))
root.button=[]

for i,(name, colour) in enumerate(names_colour):
    root.button.append(ttk.Button(root, text=name, command = colour))
    row,col=divmod(i,4)
    root.button[i].grid(sticky=N+S+E+W, row=6, column=col, padx=1, pady=1)

root.mainloop()

GUI で、テキストのフォント フェースとフォント サイズが変更されると、テキスト ボックスのサイズが変更され、ボタンが見えなくなります。私の素朴さでは、テキストボックスは同じサイズのままで、テキストはテキストボックスの制約内で折り返されるだけだと思いました。少なくとも私が達成したいことです。明らかに、フォントサイズまたはテキストボックス、tkinterには理解できない概念がありますありがとう

4

1 に答える 1

1

テキスト ウィジェットの幅は、ピクセルではなく文字幅の単位で定義され、可能な限り、構成された幅を最小幅として使用しようとします。幅の広いフォントではウィジェットが広くなり、幅の狭いフォントでは幅が狭くなります。したがって、幅の広いフォントを指定すると、X 文字の幅を維持するために幅を広げようとします。

それで、あなたはこれをどのように解決しますか?

1 つの解決策は、幅と高さを小さく設定することです。たとえば、幅と高さを 1 に設定すると、ウィジェットは幅と高さが 1 文字になるように強制しようとします。絶対に巨大なフォントを使用していない限り、フォントを拡大してもウィジェットが大きくなることはほとんどありません。

次に、pack、grid、または place アルゴリズムに依存して、ウィジェットを目的の寸法に引き延ばす必要があります。グリッドを使用している場合、これは通常、sticky 属性の設定とともに、列と行の重みが適切に設定されていることを確認する必要があることを意味します。

これの欠点は、各ウィジェットの優先サイズに基づいて魔法のように起こることに依存するのではなく、GUI が適切なサイズであることを確認する必要があることです。

簡単なハックとして、ウィジェットが作成された後に次の行を追加することで、プログラムでこれを確認できます。

frame3.output_display.configure(width=1, height=1)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(2, weight=1)

上記の追加行を使用してコードを実行すると、テキスト ウィジェットは固定サイズのままで、テキストはフォントごとに異なる場所で折り返されます。

于 2013-04-16T21:10:20.087 に答える