Как tkinter и ttk работают в 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

затем он создает корневое окно и основной фрейм, например:

_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, которая могла бы решить мои сомнения, надеюсь, вы можете помочь!


person jdecuirm    schedule 03.03.2016    source источник


Ответы (1)


Это потому, что они также являются частью tkinter. Вам нужно использовать (tk.N, tk.E, tk.W, tk.S)

person zondo    schedule 03.03.2016
comment
Большое спасибо! ты спасатель!, не ожидал этого. Где я могу найти дополнительную информацию о tkinter и ttk? а не лучше ли его придерживаться? или использовать pyQt? я читал об этом, но я новичок в Python! - person jdecuirm; 03.03.2016
comment
Вы всегда можете использовать встроенную функцию help(): help('tkinter'). В командной строке используйте pydoc: pydoc tkinter. Что касается рекомендации библиотеки, я использовал только tkinter и PyGTK+. Я бы не рекомендовал вам PyGTK+ на данном этапе, поэтому я не могу вам помочь в этом. - person zondo; 03.03.2016