Python Tkitner:未知选项“ -height”。无法更改按钮的大小

时间:2019-08-30 11:48:20

标签: python button tkinter layout

我正在尝试使用tkinter编写一个简单的程序。

我试图更改字体或样式的宽度或高度。 宽度可以更改,但是当涉及到高度或字体时-显示错误。 我在想-也许是因为布局? (宽度已更改的按钮位于def initUI的底部)

另外,如果有人也可以回答以下问题: 我将1帧设为红色,是因为那里会出现错误消息,但是有人知道如何使该红色的宽度减小吗?

谢谢你

from tkinter import *
from tkinter.ttk import *


class Example(Frame):

    def __init__(self,master):
        super().__init__()

        master.minsize(width=350, height=160)
        master.maxsize(width=650, height=500)

        self.initUI()


    def initUI(self):

        self.master.title("Hank (version 3)")
        self.pack(fill=BOTH, expand=True)

        frame1 = Frame(self)
        frame1.pack(fill=X)

        #dataset
        lbl1 = Label(frame1, text="Dataset file_name", width=18)
        lbl1.pack(side=LEFT, padx=5, pady=5)

        entryDataset= Entry(frame1)
        entryDataset.pack(fill=X, padx=5, expand=True)

        #row col begin
        frame2 = Frame(self)
        frame2.pack(fill=X)

        lblRow = Label(frame2, text="Row", width=6)
        lblRow.pack(side=LEFT, padx=5, pady=5)
        entryRow = Entry(frame2, width=5)
        entryRow.pack(side=LEFT, padx=0, expand=True)

        lblCol = Label(frame2, text="Column", width=7.5)
        lblCol.pack(side=LEFT, padx=5, pady=5)
        entryCol = Entry(frame2, width=5)
        entryCol.pack(side=LEFT, padx=5, expand=True)

        lblBegin = Label(frame2, text="Start at", width=6)
        lblBegin.pack(side=LEFT, padx=5, pady=5)
        entryBegin = Entry(frame2, width=5)
        entryBegin.pack(side=LEFT, padx=0, expand=True)

        #console window
        s = Style()
        s.configure('My.TFrame', background='grey')

        frame3 = Frame(self, style='My.TFrame')
        frame3.pack(fill=BOTH, expand=True)

        #button start and help
        s = Style()
        s.configure('My.ConsoleFrame', background='red')

        frame4 = Frame(self)
        frame4.pack(fill=BOTH, expand=True)

        startbutton = Button(frame4, text="Start Clustering", height="100", width="100")
        startbutton.pack(side=RIGHT, padx=5, pady=5)


def main():

    root = Tk()
    root.geometry("300x160+300+160")
    app = Example(root)
    root.mainloop()


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:2)

这是全球进口不良的主要原因之一。 您写在顶部:

from tkinter import *
from tkinter.ttk import *

这意味着您将tkintertkinter.ttk中的所有内容导入到main.py名称空间中。然后您编写例如:

frame3 = Frame(self, bg="grey")
....
lblCol = Label(frame2, text="Column", width=7)

这些是框架/标签对象,但是哪些? tkinter中的一个还是tkinter.ttk中的一个?如果是第一个,则必须使用-height来设置高度,否则必须使用tkinter.ttk.Style()。与框架的-bg相同。

解决方案:

import tkinter as tk


class Example(tk.Frame):

    def __init__(self,master):
        super().__init__()

        master.minsize(width=350, height=160)
        master.maxsize(width=650, height=500)

        self.initUI()


    def initUI(self):

        self.master.title("Hank (version 3)")
        self.pack(fill=tk.BOTH, expand=True)

        frame1 = tk.Frame(self)
        frame1.pack(fill=tk.X)

        #dataset
        lbl1 = tk.Label(frame1, text="Dataset file_name", width=18)
        lbl1.pack(side=tk.LEFT, padx=5, pady=5)

        entryDataset= tk.Entry(frame1)
        entryDataset.pack(fill=tk.X, padx=5, expand=True)

        #row col begin
        frame2 = tk.Frame(self)
        frame2.pack(fill=tk.X)

        lblRow = tk.Label(frame2, text="Row", width=6)
        lblRow.pack(side=tk.LEFT, padx=5, pady=5)
        entryRow = tk.Entry(frame2, width=5)
        entryRow.pack(side=tk.LEFT, padx=0, expand=True)

        lblCol = tk.Label(frame2, text="Column", width=7)
        lblCol.pack(side=tk.LEFT, padx=5, pady=5)
        entryCol = tk.Entry(frame2, width=5)
        entryCol.pack(side=tk.LEFT, padx=5, expand=True)

        lblBegin = tk.Label(frame2, text="Start at", width=6)
        lblBegin.pack(side=tk.LEFT, padx=5, pady=5)
        entryBegin = tk.Entry(frame2, width=5)
        entryBegin.pack(side=tk.LEFT, padx=0, expand=True)

        frame3 = tk.Frame(self, bg="grey")
        frame3.pack(fill=tk.BOTH, expand=True)

        frame4 = tk.Frame(self)
        frame4.pack(fill=tk.BOTH, expand=True)

        startbutton = tk.Button(frame4, text="Start Clustering", height="100", width="100")
        startbutton.pack(side=tk.RIGHT, padx=5, pady=5)


def main():

    root = tk.Tk()
    root.geometry("300x160+300+160")
    app = Example(root)
    root.mainloop()


if __name__ == '__main__':
    main()

我在这里是使用tkinter小部件完成的。您显然可以执行import tkinter.ttk as ttk并使用这些代码来重写代码,这只是个问题。