当我用wx.timer加载它时,我想避免闪烁

时间:2017-09-18 06:41:49

标签: python wxpython

# -*- coding: utf-8 -*-
import wx.html2
import sqlite3

class MainFream(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, style=wx.DEFAULT_FRAME_STYLE)
        self.htmlweb = wx.html2.WebView.New(self, size=(0, 0),
                                            backend=wx.html2.WebViewBackendIE
                                            #backend=wx.html2.WebViewBackendWebKit
        )

        self.conn = sqlite3.connect("main.db")
        self.cursor = self.conn.cursor()

        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.AutoRefresh, self.timer)
        self.timer.Start(10000)

        self.HtmlCode()

    def AutoRefresh(self, event):
        self.HtmlCode()

    def DataBase(self):
        self.color = ('#00ff00', 'red')
        self.selectcolor = []

        self.cursor.execute('select *from clinic1')
        for self.data1 in self.cursor.fetchall(): pass
        for n in range(4, 7):
            if self.data1[n] == 'True': self.selectcolor.append(self.color[0])
            else: self.selectcolor.append(self.color[1])

        self.cursor.execute('select *from clinic2')
        for self.data2 in self.cursor.fetchall(): pass
        for n in range(4, 7):
            if self.data2[n] == 'True': self.selectcolor.append(self.color[0])
            else: self.selectcolor.append(self.color[1])

        self.cursor.execute('select *from clinic3')
        for self.data3 in self.cursor.fetchall(): pass

    def HtmlCode(self):
        self.DataBase()
        self.HTML_CODE = """
        <!DOCTYPE HTML>
        <html lang="ko">
          <head>
            <meta charset='utf-8'>
            <title>HTML TEST</title>
            <style type='text/css'>
              html{{
                background-image:url(D:/python3/PycharmProjects/untitled/3.png);
              }} 
              table{{
                width:100%;
              }}
              table, caption, th, td{{     
                border:2px solid lightgray;      
                border-collapse:collapse;
                height:0px;  
                color:white;        
                text-align:center;      
                font-size:155%;     
                font-style:normal; 
                font-weight:bold;
                font-family:Malgun Gothic;                    
              }}
              caption{{
                background-color:white; color:#0d0d0d; font-size:250%; font-weight:bold;
              }} 
              th{{
                background-color:white; color:#0d0d0d; font-size:145%; font-weight:bold;
              }}    
              caption, th{{
                background-image:url(D:/python3/PycharmProjects/untitled/bg5.png);
              }}    
            </style>
          </head>
          <body scroll='no'>
            <table>
              <caption>T E S T Main</caption>
              <thead>
                <tr bgcolor='ffffff'>      
                  <th>T E S T1</th>
                  <th>T E S T2</th>
                  <th>T E S T3</th>
                  <th>T E S T4</th>
                  <th>T E S T5</th>
                  <th>T E S T6</th>  
                </tr>
              </thead>
              <tbody>
                <tr style='background: url(D:/python3/PycharmProjects/untitled/bg1.png)'> 
                  <td>{0}</td>
                  <td>{1}</td>
                  <td>{2}</td>     
                  <td><p style='color:{3}'>{4}</p></td>
                  <td><p style='color:{5}'>{6}</p></td>
                  <td><p style='color:{7}'>{8}</p></td>      
                </tr>
                <tr style='background: url(D:/python3/PycharmProjects/untitled/bg1.png)'>       
                  <td>{9}</td>
                  <td>{10}</td>
                  <td>{11}</td>     
                  <td><p style='color:{12}'>{13}</p></td>
                  <td><p style='color:{14}'>{15}</p></td>
                  <td><p style='color:{16}'>{17}</p></td>      
                </tr>           
              </tbody>
              <tfoot>
                <tr>
                  <td colspan="6"><marquee><font color='cyan'>{18}</font></marquee></td>
                </tr>
              </tfoot>  
            </table> 
          </body>
        </html>
        """
        self.DataIn()

    def DataIn(self):
        self.htmlweb.SetPage(self.HTML_CODE.format(
            self.data1[1], self.data1[2], self.data1[3], self.selectcolor[0], self.data1[4], self.selectcolor[1], self.data1[5], self.selectcolor[2], self.data1[6],
            self.data2[1], self.data2[2], self.data2[3], self.selectcolor[3], self.data2[4], self.selectcolor[4], self.data2[5], self.selectcolor[5], self.data2[6],
            self.data3[1]), "")

if __name__ == '__main__':
    app = wx.App()
    fream = MainFream()
    fream.Show(True)
    app.MainLoop()

我们使用Windows来测试每小时使用wx.html2wx.timer加载数据库的屏幕。

每次使用wx.timer加载数据时,background-image: url (D: /python3/PycharmProjects/untitled/3.png);上的背景图像都会闪烁白色。

你不能解决眨眼的问题吗?

另外,我不想使用wx.timer,但我想在只更改数据库值时实时反映更改的内容。在这种情况下是否有一个模块可供使用?

1 个答案:

答案 0 :(得分:1)

闪烁正在发生,因为您每次都在重新加载整个页面,因此窗口小部件正在转储当前页面,清除窗口并重新绘制新文档。如果您想要更新值而不进行所有操作,那么您需要执行与在实际网站上解决问题类似的操作,例如使用Javascript从服务器获取新值,然后更新现有文档对象使用要显示的新文本。

由于您正在使用WebView,因此有一些实现此选项的选项比需要在某处运行真实的Web服务器要简单一些。一种选择是在应用程序中只有另一个线程正在侦听http连接,并让它返回一些带有新值的json,以响应javascript代码发出请求。或者,由于WebView具有方便RunScript,您可以通过一些javascript代码提供新数据值,以便在应用程序代码的WebView中执行。