經過一些挖掘和測試,我想我找到了一些可以使用的東西。我們需要使用tkFont的導入並使用actual()
來獲取字體信息。
嘗試以下操作:
from tkinter import *
import tkinter.font as tkFont
# imports for python 2
# from Tkinter import *
# import tkFont
root=Tk()
root.withdraw()
top=Toplevel()
label_not_settings = Label(top, text ="Some long title")
label_not_settings.grid(row = 0, column = 0, sticky = 'w')
label_arial_12 = Label(top, text ="Some long title", font = ('Arial', 12))
label_arial_12.grid(row = 1, column = 0, sticky = 'w')
label = Label(top, text ="Some long title", font=('Times', 18))
label.grid(row = 2, column = 0, sticky = 'w')
empty_font = tkFont.Font()
label_not_settings_font = tkFont.Font(font = label_not_settings['font'])
label_arial_12_font = tkFont.Font(font = label_arial_12['font'])
toplevel_font = tkFont.Font(top.title("Some long title")) # no error comes from this line thought I don't think its actually working as intended.
label_font = tkFont.Font(font = label['font'])
print('# Results of priting with .actual() "empty_font = tkFont.Font()"')
print(empty_font.actual())
print("")
print("# Results of priting with .actual() on {}".format("label_not_settings_font"))
print(label_not_settings_font.actual())
print("")
print("# Results of priting with .actual() on {}".format("label_arial_12_font"))
print(label_arial_12_font.actual())
print("")
print("# Results of priting with .actual() on {}".format("toplevel_font"))
print(toplevel_font.actual())
print("")
print("# Results of priting with .actual() on {}".format("label_font"))
print (label_font.actual())
root.mainloop()
對我來說這導致:
# Results of priting with .actual() "empty_font = tkFont.Font()"
{'family': 'Arial', 'size': 12, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
# Results of priting with .actual() on label_not_settings_font
{'family': 'Segoe UI', 'size': 9, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
# Results of priting with .actual() on label_arial_12_font
{'family': 'Arial', 'size': 12, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
# Results of priting with .actual() on toplevel_font
{'family': 'Arial', 'size': 12, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
# Results of priting with .actual() on label_font
{'family': 'Times New Roman', 'size': 18, 'weight': 'normal', 'slant': 'roman', 'underline': 0, 'overstrike': 0}
它似乎產生你所需要的字體信息。雖然我不是100%確定它調用toplevel_font.actual()
時按預期工作,但它產生了與調用一個空變量(我想它只是說明默認字體,但我不確定)相同的結果。另外,如果我創建一個帶有文本但沒有字體配置的標籤,那麼它會產生不同的font.actual()結果。
更新:
而且我已經調查創建與標題欄的功能你自己的標題欄的問題。到目前爲止,我遇到的問題是窗口移動,因此當拖動窗口時,標題欄的左上角位於鼠標點,將窗口拖到顯示器的一側時會失去自動調整大小的功能,無法手動調整窗口大小。
我想成像它可以建立一個功能齊全的標題欄,我會努力,因爲我很感興趣,看看我能不能做一個。但現在這裏有一些信息來說明創建自己的標題欄的基礎知識。
這段代碼來自於這個帖子:Can I change the title bar in Tkinter?
我已經取得了一些小的變化,但它基本上是相同的。
from tkinter import *
root = Tk()
def move_window(event):
root.geometry('+{0}+{1}'.format(event.x_root, event.y_root))
root.overrideredirect(True) # turns off title bar, geometry
root.geometry('200x100') # set new geometry
# make a frame for the title bar
title_bar = Frame(root, bg = 'white', relief = FLAT, bd = 2)
# put a close button on the title bar
close_button = Button(title_bar, text = 'X', relief = FLAT, command = root.destroy)
# a canvas for the main area of the window
window = Canvas(root, bg='black')
# pack the widgets
title_bar.pack(expand = 1, fill = X)
close_button.pack(side = RIGHT)
window.pack(expand = 1, fill = BOTH)
# bind title bar motion to the move window function
title_bar.bind('<B1-Motion>', move_window)
root.mainloop()
編輯:
這一切都這樣說,我可能只是測試對每個主要的操作系統和除冰一個良好的root.geometry()
或root.minsize()
,將顯示在全標題的文本。這可能不是一個優雅的解決方案,如使用代碼來計算文本大小並將該大小應用於窗口大小,但它應該可以實現。
那麼,人們做什麼?我的意思是,沒有自尊的應用程序可以容忍標題被隱藏! – AlwaysLearning
@AlwaysLearning:我認爲你錯了。我可以很容易地從各種程序中刪除標題的窗口。 –