2015-06-01 124 views
0

我正在构建基于GUI的Reddit刮板应用程序的过程中,我遇到了一些问题。首先,我似乎无法让我的第二个tkinter窗口从redditReturn类文件加载。另外,我不确定让我的代码段运行Reddit API以及正在运行的构建tkinter窗口的方法是否正确。唉,我主要关心的是如何纠正错误:tkinter基于GUI的Reddit刮板应用程序中的名称错误--Python

Traceback (most recent call last): 
    File "redditscraper4.py", line 77, in <module> 
    app = RedditScraper() 
    File "redditscraper4.py", line 21, in __init__ 
    frame = F(container, self) 
    File "redditscraper4.py", line 62, in __init__ 
    newFrame = LabelFrame(self, text = intro) 
NameError: name 'LabelFrame' is not defined 

我不知道如何纠正问题,截至目前。任何帮助表示赞赏!

全码:

import tkinter as tk 
import praw 



class RedditScraper(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     container = tk.Frame(self) 

     container.pack(side="top", fill="both", expand = True) 

     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     for F in (StartPage, redditReturn): 

      frame = F(container, self) 

      self.frames[F] = frame 

      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 


class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="Start Page") 
     label.pack(pady=10, padx=10) 

     button1 = tk.Button(self, text="Scrape This Subreddit", command=lambda: controller.show_frame(redditReturn)) 
     button1.pack(pady=10, padx=10) 

     e1 = tk.Entry(self) 
     e1.pack(pady=10, padx=10) 

     subreddit_Chosen = '"' + e1.get() + '"' 

class redditReturn(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 


     user_agent = "Simple Subreddit Scraper" 
     r = praw.Reddit(user_agent=user_agent) 
     posts = r.get_subreddit("pics").get_hot(limit = 10) 


     """Creates all the buttons and frames for the GUI""" 
     intro = "News on Reddit: " 
     newFrame = LabelFrame(self, text = intro) 
     newFrame.pack(fill="both", expand="yes", anchor = NW)   
     row = 0 
     for p in posts: 
      gotoArticle = partial(open, p.url) 
      title = "(" + str(p.score) +") " + p.title 
      Label(newFrame, text= title, pady= 10, wraplength= 700, justify= LEFT).grid(row= row, column= 0, sticky= W) 
      Button(newFrame, text= "Read more!", command= gotoArticle).grid(row= row+1, column= 0, sticky= W) 
      row = row + 2 

     self.pack() 
     self.redditReturn() 



app = RedditScraper() 
app.mainloop() 

此外,作为一个侧面说明。如果有人知道如何更改特定版(Subreddit)我是来自于线刮:

posts = r.get_subreddit("pics").get_hot(limit = 10) 

我似乎无法为生活我能够连接先前的条目Tkinter的元素来改变“图片“到这行代码中的其他东西。

再次,谢谢!

回答

1

该错误告诉你到底是什么问题。您正在调用名为LabelFrame的函数或类,但不存在此类函数或类。所以真正的问题是,“它为什么不存在?”

因为要导入Tkinter的是这样的:

import Tkinter as tk 

...您需要前缀的所有的Tkinter类和命令与tk.。由于LabelFrame是Tkinter的小工具,你需要这样的创建:

newFrame = tk.LabelFrame(self, text = intro) 
+0

谢谢,这完美!再次,如果我的问题看起来很荒谬,我很抱歉,我对编码很陌生。 – JeffD

相关问题