2017-04-04 3 views
0

저는 TKinter를 사용하여 인기있는 트윗을 트위터를 사용하여 트위터 API에서 렌더링하고 있습니다. 문제는 트윗의 프레임이 서로의 하단에 위치한다는 것입니다. 프레임의 측면을 변경하려고 시도했지만 아무 것도 변경되지 않았습니다.TKinter로 서로 옆에있는 프레임에 라벨을 표시합니다.

문제는

The problem

아래와 같습니다 나는 트윗이 서로이 다음과 같이 할 것을 권장합니다

from Tkinter import * 
import tweepy 
from local import * 
from PIL import Image, ImageTk 
from ttk import Frame, Style 
import Tkinter as tk 
import ttk 

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
auth.set_access_token(OAUTH_TOKEN, OAUTH_TOKEN_SECRET) 
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
auth.set_access_token(OAUTH_TOKEN, OAUTH_TOKEN_SECRET) 
api = tweepy.API(auth) 
sa_ID = 23424938 
large_text_size = 12 
text_size = 20 

#create obj in the root page (main windows) 
root= Tk() 
#make bg black 
root.configure(background='black') 
screenWidth = root.winfo_screenwidth() 
screenHeight = root.winfo_screenheight() 

root.overrideredirect(1) 
root.geometry('%dx%d+0+0' % (screenWidth, screenHeight)) 
root.configure(background='#000000') # black 

canvas = Canvas(
    background='#000000', # black 
    borderwidth=-5, 
    height=500, 
    relief='flat', 
    width=500) 

canvas.pack(expand=1, fill=BOTH) 
#create invisible container 
topframe= tk.Frame(root,background='black') 
topframe.pack(side=TOP, fill=BOTH, expand = YES) 
label24 = Label(topframe, text="Popular Tweets", bg='black', fg='white',font=('minionpro', text_size)).pack(anchor=CENTER) 

bottomframe= Frame(root) 
bottomframe.pack(side= BOTTOM) 

#, padx=20, pady=20 
# name the window 
root.title("The news Portal") 
trends1 = api.trends_place(id=sa_ID) 
data = trends1[0] 
# grab the trends 
trends = [] 
trends=data['trends'] 
scrollbar = tk.Scrollbar(root) 
scrollbar.pack(side=RIGHT, fill=Y) 
listbox = Listbox(root, yscrollcommand=scrollbar.set, background='black') 
listbox.pack(side=RIGHT) 
scrollbar.config(command=listbox.yview) 


for trend in trends: 
    if trend['name'].startswith('#'): 
     for status in tweepy.Cursor(api.search, q=trend['name'], result_type='popular').items(1): 
      leftframe = tk.Frame(canvas, background='black', borderwidth=2, relief="groove") 
      leftframe.pack() 
      label6 = Label(leftframe, text=('Tweet by: @' + status.user.screen_name, status.text), bg='black',fg='white', 
           font=('minionpro', large_text_size)).pack(side=BOTTOM,anchor=N) 
      #label23 = Label(leftframe, text="\n", bg='black', fg='white').pack(side=BOTTOM) 


      #print status.text 
#windows is continously there untill uder close it (never close) 
root.mainloop() 
: 여기

The desired

내 코드입니다

문제는 내가 mi입니다. 이 레이아웃으로 인해 많은 트윗을 보냈습니다. 도와 주셔서 감사합니다.

+0

'[tkinter] grid labels '에 대한 SO 검색은 435 개의 결과를 반환합니다. 처음 10 ~ 20 명의 도움이 필요하다고 생각합니다. –

+0

나는 실제로 검색을했고 장소, 그리드 및 for 루프를 만드는 것과 같은 여러 솔루션을 적용했습니다. 나는이 코멘트를 써서 새로운 정보를 추가했다는 것을 알지 못한다 :) @TerryJanReedy –

+0

당신은 질문에서이 코멘트의 새로운 정보를 말하지 않았으므로 나는 알 수 없었다. 많은 초보자는 간단한 검색이 중복을 나타 내기 때문에 분명히 SO 검색에 대해 알지 못합니다. 어떤 경우 든 원하는 출력은 고정 된 크기의 읽기 전용 텍스트 위젯 격자입니다. 트윗 한도 때문에 가능합니다. 레이블 또는 텍스트가 작동 할 수 있습니다. 후기는 더 복잡하지만 다른 글꼴과 크기를 허용합니다. –

답변

0

pack() 레이아웃을 사용하면 프레임 내의 요소 사이의 간격을 결정하는 기능을 포기할 수 있습니다. Tk는 요소가 할당 된 프레임 내에서 최소 공간을 차지하도록합니다. 대신 grid() 레이아웃을 사용하면 프레임 내에서보다 구체적으로 배치하고 프레임의 어느 정도 차지할지 결정할 수 있습니다. 예제와 사용법은 grid의 effbot 설명을 참고하십시오 : http://effbot.org/tkinterbook/grid.htm

+0

_ "pack() 레이아웃을 사용하면 프레임 내의 요소 사이의 간격을 결정할 수있는 능력을 포기합니다."_ - 그건 사실이 아닙니다. 'padx','pady','ipadx' 및'ipady' 옵션을 사용하여 추가 패딩을 추가 할 수 있습니다. –

+0

충분히 공정해야합니다. 특히 프레임간에 배치되는 부분이 어디 있는지 확실히 말하면됩니다. – paddock

+0

@BryanOakley ive가 그리드를 사용하려고했지만 같은 문제가 발생했습니다. 제발, 위에 첨부 된 원하는 그림에 도달하는 방법을 제안 할 수 있습니까? : –

관련 문제