我正在学习Python,我对.grid()方法有疑问。 在作者给出的例子中,他正在使用*进行导入:
from tkinter import *
from tkinter import ttk, filedialog, messagebox
import base64
import json
import os
from bs4 import BeautifulSoup
import requests
然后,他创建了根窗口和主框架,如下所示:
_root = Tk() # tkinter object, main window
_root.title('Scrape app') # window title
_root.resizable(width=False, height=False)
_mainframe = ttk.Frame(_root, padding='5 5 5 5')
_mainframe.grid(row=0, column=0, sticky=(E, W, N, S))
到目前为止,我抓住了这一切。问题开始于他说由于姓名冲突而导入*并不是一个好习惯,所以在我尝试创建类似的良好实践思想时,我这样做了:
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import base64
import json
import os
from bs4 import BeautifulSoup
import requests
root_window = tk.Tk()
root_window.title('My first attemp of custom guiscrape')
root_window.resizable(width=False, height=False)
# First Frame
g_main_frame = ttk.Frame(root_window, padding='5 5 5 5')
g_main_frame.grid(row=0, column=0, sticky='NSWE')
g_url_frame = ttk.LabelFrame(g_main_frame, text='URL', padding='5 5 5 5')
g_url_frame.grid(row=0, column=0, sticky='EW')
g_url_frame.columnconfigure(0, weight=1)
g_url_frame.rowconfigure(0, weight=1)
var_url = tk.StringVar()
var_url.set('http://localhost:8000')
g_url_entry = ttk.Entry(g_url_frame, width=40, textvariable=var_url)
g_url_entry.grid(row=0, column=0, sticky='NESW', padx=5)
root_window.mainloop()
这里的问题是当_mainframe.grid()出现时,粘性选项在作者的例子中得到一个带有四个常量的元组,但是当我尝试在我的尝试中给出一个元组时,我得到一个错误,常数E没有定义,所以我必须使用类似' NEWS'这样的字符串,与作者的方法(N,E,W,S)有很大不同。
与tkinter和ttk的网格方法有区别吗?什么是最好的使用方法?我找不到更多关于ttk的文件可以解决我的疑问,希望你能帮忙!
答案 0 :(得分:4)
那是因为那些也是tkinter
的一部分。您需要使用(tk.N, tk.E, tk.W, tk.S)