Использование entry, StringVar и IntVar с Tkinter и Python3 - PullRequest
0 голосов
/ 24 февраля 2019

Я новичок в python и, объясняя, пожалуйста, сделайте его дружелюбным для новичков :).В основном, когда я пытаюсь запустить сканер reddit с помощью tkinter, я получаю всевозможные ошибки, которые не понимаю. Заранее спасибо, я очень ценю сообщество.

Вот несколько важных кодов:

def Exas():
    import praw
    imgcount = 0
    reddit = praw.Reddit(client_id='CENSORED',
                         client_secret='CENSORED',
                         user_agent='TheBigScraper(By u/scrappermaster)',
                         username='scrappermaster',
                         password='thescrapperisscrap')

    listoftitles = []
    listofurls = []

    # whichone = input('what subreddit do you want to access? ')
    # endlimit = input('what number of pictures do you want to download? ')
    whichoner = whichone
    ender = int(endlimit.get())

    subreddit = reddit.subreddit(whichone)
    for submission in subreddit.hot(limit=int(ender)):
        title = submission.title
        link = submission.url
        Both = title + " " + link
        if '.jpg' in link :
            listofurls.append(link)
            listoftitles.append(title)

И примерно на 50 строк ниже:

import tkinter as tk
import colorama

root = tk.Tk()


root.title("InstagramBot")

root.geometry('320x125')

whichone = str(tk.StringVar())
endlimit = tk.StringVar()

lblWhichone = tk.Label(root, text = 'Subreddit Name:').grid(row = 0, column = 0, padx = 0, pady = 10)
entWhichone = tk.Entry(root, textvariable = whichone).grid(row = 0, column = 1)

lblIntendlimit = tk.Label(root, text = 'Number of Pictures:').grid(row = 1, column = 0, padx = 0, pady = 10)
entendlimit = tk.Entry(root, textvariable = endlimit).grid(row = 1, column = 1)


btn = tk.Button(root, text = 'Execute', command = Exas, fg='red', font='Helvetica 18 bold').grid(row = 5, column = 1)
root.mainloop()

root.title("InstagramBot")

Странный код ошибки:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/Users/eucar/Documents/Testing/Compactor2000.py", line 28, in Exas
    for submission in subreddit.hot(limit=int(ender)):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/praw/models/listing/generator.py", line 52, in __next__
    self._next_batch()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/praw/models/listing/generator.py", line 62, in _next_batch
    self._listing = self._reddit.get(self.url, params=self.params)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/praw/reddit.py", line 408, in get
    data = self.request('GET', path, params=params)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/praw/reddit.py", line 534, in request
    params=params)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/prawcore/sessions.py", line 185, in request
    params=params, url=url)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/prawcore/sessions.py", line 130, in _request_with_retries
    raise self.STATUS_EXCEPTIONS[response.status_code](response)
prawcore.exceptions.Redirect: Redirect to /subreddits/search

1 Ответ

0 голосов
/ 24 февраля 2019

Я уменьшил Exas до минимума на основе Tkinter.Я никогда не использовал библиотеку praw и не установил ее.

def Exas():
    whichoner = whichone.get()
    ender = int(endlimit.get())
    print(whichoner, ender)

Изменение окна tkinter для StingVar, о котором я упоминал в комментарии.

import tkinter as tk 

root = tk.Tk()
root.title("InstagramBot")

root.geometry('320x125+50+50')

whichone = tk.StringVar()
endlimit = tk.StringVar()

lblWhichone = tk.Label(root, text = 'Subreddit Name:').grid(row = 0, column = 0, padx = 0, pady = 10)
entWhichone = tk.Entry(root, textvariable = whichone).grid(row = 0, column = 1)
# The grid method returns None!  All these variables have the value None.  
# I don't think it matters for what you're doing but may cause problems for you in the future. 
# In general this is better.
# entWhichone = tk.Entry(root, textvariable = whichone)
# entWhichone.grid(row = 0, column = 1)
# entWhichone now points to a tk.Entry object.

lblIntendlimit = tk.Label(root, text = 'Number of Pictures:').grid(row = 1, column = 0, padx = 0, pady = 10)
entendlimit = tk.Entry(root, textvariable = endlimit).grid(row = 1, column = 1)

btn = tk.Button(root, text = 'Execute', command = Exas, fg='red', font='Helvetica 18 bold').grid(row = 5, column = 1)
root.mainloop()

Если я набираю test и 42 в вашем окне, это выводит Test и 42 в мою консоль.Ваше последнее сообщение об ошибке указывает, что StringVar был передан в функцию или метод praw.В функции Exas вам нужно:

whichoner = whichone.get() # Was it left at ... = whichone ?

Если приведенные выше предложения не помогают, попробуйте распечатать whichoner и ender, прежде чем что-либо еще будет вызвано, чтобы проверить, что они возвращают то, что вы ожидаете.

Aстиль заключается в том, что в Python функции и переменные обычно в нижнем регистре с подчеркиванием '_' для разделения, lbl_which_one вместо lblWhichone, exas для Exas.Классы именуются с большой буквы. Entry создает объект класса Entry.Ваш код все равно будет работать, но другим будет труднее его понять.

...