tkinter 和 ttk 在 python 3.5 中如何工作?
How tkinter and ttk works in python 3.5?
我正在学习 Python,我对 .grid() 方法有疑问。
在作者给出的示例中,他正在使用 * 进行导入,如下所示:
from tkinter import *
from tkinter import ttk, filedialog, messagebox
import base64
import json
import os
from bs4 import BeautifulSoup
import requests
然后,他创建了根window和主框架,像这样:
_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() 出现时,sticky 选项得到一个有四个常量的元组,在作者的例子中,但是当我尝试给出一个元组时,我得到一个错误,常量E 未定义,所以我必须使用像 'NEWS' 这样的字符串,与作者的方法(N、E、W、S)有很大不同。
和tkinter、ttk的grid方法有区别吗?使用它的最佳方法是什么?我找不到更多关于 ttk 的文档可以解决我的疑问,希望你能帮忙!
那是因为它们也是 tkinter
的一部分。您需要使用 (tk.N, tk.E, tk.W, tk.S)
我正在学习 Python,我对 .grid() 方法有疑问。 在作者给出的示例中,他正在使用 * 进行导入,如下所示:
from tkinter import *
from tkinter import ttk, filedialog, messagebox
import base64
import json
import os
from bs4 import BeautifulSoup
import requests
然后,他创建了根window和主框架,像这样:
_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() 出现时,sticky 选项得到一个有四个常量的元组,在作者的例子中,但是当我尝试给出一个元组时,我得到一个错误,常量E 未定义,所以我必须使用像 'NEWS' 这样的字符串,与作者的方法(N、E、W、S)有很大不同。
和tkinter、ttk的grid方法有区别吗?使用它的最佳方法是什么?我找不到更多关于 ttk 的文档可以解决我的疑问,希望你能帮忙!
那是因为它们也是 tkinter
的一部分。您需要使用 (tk.N, tk.E, tk.W, tk.S)