У меня есть приложение, над которым я работал, чтобы узнать больше о wxPython (я был главным образом скриптером). Я забыл об этом, теперь я открываю его. Это скребок экрана, и я работаю почти так, как хочу, собираюсь создать парсер регулярных выражений, чтобы вырезать ссылки в каждой царапине, которая мне не нужна. У меня есть вопросы. В этом текущем состоянии, если я проверяю несколько сайтов, он выходит и сбрасывается и возвращает его в отдельных окнах, для каждого раздела в функции Clicked. Я хочу положить их в рамку, в окно, в целом. Я также хочу знать, могу ли я взять список, который они считывают, и отправить его в контрольный список, чтобы кто-то мог проверять отдельные элементы, я хочу создать функцию сохранения и сохранить определенные. Что касается функции сохранения, я хочу сохранить сохраненные проверки, есть ли призывы к виджетам, чтобы сохранить их состояния? Я знаю, что это много, но спасибо за помощь.Вопросы по форматированию wxPython
EDIT (забыл код)
import wx
import urllib2
from BeautifulSoup import BeautifulSoup
from BeautifulSoup import Tag
import re
from pyparsing import makeHTMLTags, originalTextFor, SkipTo, Combine
import wx
import wx.html
global P
siteDict = {0:'http://www.reddit.com', 1:'http://www.boston.com', 2:'http://www.stumbleupon.com', 3:'news.google.com'}
class citPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, id)
allSites = ['Reddit', 'Boston.com', 'StumbleUpon', 'Google News']
wx.StaticText(self, -1, "Choose the Sites you would like Charlie to Visit:", (45, 15))
self.sitList = wx.CheckListBox(self, 20, (60, 50), wx.DefaultSize, allSites)
class nextButton(wx.Button):
def __init__(self, parent, id, label, pos):
wx.Button.__init__(self, parent, id, label, pos)
class checkList(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(400, 300))
self.panel = citPanel(self, -1)
nextButton(self.panel, 30, 'Ok', (275, 50))
self.Bind(wx.EVT_BUTTON, self.Clicked)
self.Centre()
self.Show(True)
def Clicked(self, event):
checkedItems = [i for i in range(self.panel.sitList.GetCount()) if self.panel.sitList.IsChecked(i)]
print checkedItems
r = [siteDict[k] for k in checkedItems]
print r
for each in r:
pre = '<HTML><head><title>Page title</title></head>'
post = '</HTML>'
site = urllib2.urlopen(each)
html=site.read()
soup = BeautifulSoup(html)
tags = soup.findAll('a')
soup1 = BeautifulSoup(''.join(str(t) for t in tags))
for link in soup1.findAll('a'):
br= Tag(soup, 'p')
index= link.parent.contents.index(link)
link.parent.insert(index+1, br)
P = soup1.prettify()
print P
#for link2 in soup1.findAll('a'):
#p1= Tag(soup, '
frm = MyHtmlFrame(None, "Charlie", P)
frm.Show()
class MyHtmlFrame(wx.Frame):
def __init__(self, parent, title, page):
wx.Frame.__init__(self, parent, -1, title)
html = wx.html.HtmlWindow(self)
if "gtk2" in wx.PlatformInfo:
html.SetStandardFonts()
html.SetPage(page)
#app = wx.PySimpleApp()
#app.MainLoop()
#event.Skip()
#self.Destroy()
app = wx.App()
checkList(None, -1, 'Charlie')
app.MainLoop()
Мне очень жаль, что так долго после того, как вы ответили, но у меня было много в конце месяца. Я играл с этим, и у меня было несколько вопросов. Дик, вы говорите, что берете каждую ссылку, которую он возвращает, и помещаете ее в словарь с ключом, являющимся сайтом, из которого он пришел? Это единственный способ заставить их показать в одном окне? Кроме того, я был заинтересован в том, чтобы html-фрейм был частью того же фрейма, что и флажок, так что он будет инициализирован пустым и заселен после? – Kevin
Я говорю, что для каждого результата вам не нужен новый фрейм. Вы можете просто установить содержимое одного кадра в зависимости от того, какую страницу вы хотите просмотреть. Конечно, вы можете использовать wx.Notebook (или книгу выбора, или listbook или wxTreebook), чтобы выбрать между вкладками вкладки ala Firefox. Кроме того, посмотрите на wx sizers для размещения нескольких виджетов в одном фрейме. Но заработайте одно (либо макет, либо вкладки), прежде чем попробовать другой. – wisty