在我当前的项目中,我使用reportlab生成pdf文件,并使用使用wxPython包编码的pdf查看器查看它。当我点击按钮查看pdf时,查看器打开并正常工作,但GUI没有响应,按钮冻结。我必须用任务管理器终止这个进程。你知道吗
import tkinter
from tkinter import ttk
import storage
from tkinter import messagebox
from tabulate import tabulate
from tkcalendar import Calendar, DateEntry
import wx
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, inch
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle,
Paragraph, Image, Spacer
from reportlab.lib.styles import getSampleStyleSheet
import locale
import wx.lib.sized_controls as sc
from wx.lib.pdfviewer import pdfViewer, pdfButtonPanel
def job_folder():
window = tkinter.Tk()
window.geometry("1200x550+100+50")
window.resizable(False, False)
window.title("Job Folder")
这段代码使用页眉和页脚图像创建pdf文件,并从数据库中获取数据。你知道吗
app = wx.App()
frame = wx.Frame(None, title='Simple application')
doc = SimpleDocTemplate("job_folder1.pdf", pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30,
bottomMargin=18)
doc.pagesize = A4
elements = []
logo = "header.jpg"
im = Image(logo, 7 * inch, 1.1 * inch, hAlign='CENTER')
elements.append(im)
elements.append(Spacer(1, 0.25 * inch))
db = storage.connect()
cursor = db.cursor()
cursor.execute(
"select CONCAT(prefix,job_no ) AS job,date_,account,shipper,
consignee, maste, house, freight, place_receipt, final_dest, status
"
" from sea_exp_tra_job_folder ")
data = cursor.fetchall()
db.close()
dataa = [('Job No', 'Date', 'Account', 'Shipper', 'Consignee', 'Master',
'House', 'PP/CC', 'Origin', 'Destination', 'Status')]
dataa.extend(data)
data = tuple(dataa)
style = TableStyle([('ALIGN', (1, 1), (-2, -2), 'RIGHT'),
('BACKGROUND', (0, 0), (-1, 0), colors.powderblue),
('TEXTCOLOR', (1, 1), (-2, -2), colors.black),
('VALIGN', (0, 0), (0, -1), 'TOP'),
('TEXTCOLOR', (0, 0), (0, -1), colors.black),
('ALIGN', (0, -1), (-1, -1), 'CENTER'),
('VALIGN', (0, -1), (-1, -1), 'MIDDLE'),
('TEXTCOLOR', (0, -1), (-1, -1), colors.green),
('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
('BOX', (0, 0), (-1, -1), 0.25, colors.black),
])
s = getSampleStyleSheet()
s = s["BodyText"]
s.wordWrap = 'CJK'
data2 = [[Paragraph(cell, s) for cell in row] for row in data]
t = Table(data2)
t.setStyle(style)
elements.append(t)
elements.append(Spacer(1, 0.25 * inch))
logo1 = "footer.png"
im1 = Image(logo1, 6 * inch, 0.6 * inch, hAlign='CENTER')
elements.append(im1)
doc.build(elements)
编写此代码是为了在wx PDF查看器中查看PDF文件
def prev123():
locale.setlocale(locale.LC_ALL, 'C')
class PDFViewer(sc.SizedFrame):
def __init__(self, parent, **kwds):
super(PDFViewer, self).__init__(parent, **kwds)
paneCont = self.GetContentsPane()
self.buttonpanel = pdfButtonPanel(paneCont, wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize, 0)
self.buttonpanel.SetSizerProps(expand=True)
self.viewer = pdfViewer(paneCont, wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.HSCROLL | wx.VSCROLL |
wx.SUNKEN_BORDER)
self.viewer.SetSizerProps(expand=True, proportion=1)
self.buttonpanel.viewer = self.viewer
self.viewer.buttonpanel = self.buttonpanel
if __name__ == '__main__':
import wx.lib.mixins.inspection as WIT
app = WIT.InspectableApp(redirect=False)
pdfV = PDFViewer(None, size=(800, 600))
pdfV.viewer.LoadFile(r'job_folder1.pdf')
pdfV.Show()
app.MainLoop()
当我点击这个按钮,然后这个图形用户界面变得没有反应,我必须杀死这个进程从任务管理器请帮助我这个。你知道吗
B2 = tkinter.Button(window, text="Preview and Print", width=14,
command=prev123)
B2.place(x=570, y=95)
window.mainloop()
job_folder()
Tkinter和wxPython不兼容。它们有自己的事件循环,这些循环会相互冲突。如果需要使用wxPython的PDF查看功能,那么应该使用wxPython而不是Tkinter编写应用程序。你知道吗
相关问题 更多 >
编程相关推荐