<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: threadspeed</title>
    <description>The latest articles on DEV Community by threadspeed (@threadspeed).</description>
    <link>https://dev.to/threadspeed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F384818%2F2dc697ec-be20-4379-b8c8-bd4b54d73b14.png</url>
      <title>DEV Community: threadspeed</title>
      <link>https://dev.to/threadspeed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/threadspeed"/>
    <language>en</language>
    <item>
      <title>Plots with Plotly</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Mon, 08 Jun 2020 22:43:47 +0000</pubDate>
      <link>https://dev.to/threadspeed/plots-with-plotly-3chn</link>
      <guid>https://dev.to/threadspeed/plots-with-plotly-3chn</guid>
      <description>&lt;p&gt;Python programmers often use matplotlib to create plots, you can make all kinds of charts with it like &lt;a href="https://pythonbasics.org/matplotlib-bar-chart/"&gt;bar charts&lt;/a&gt; or &lt;a href="https://pythonspot.com/matplotlib-line-chart/"&gt;line charts&lt;/a&gt;. But this is not the only way to visualize your data. &lt;/p&gt;

&lt;p&gt;A popular alternative the plotly module. This service lets you create plots and put them online. You should &lt;a href="https://pythonprogramminglanguage.com/"&gt;learn Python&lt;/a&gt; before trying &lt;a href="https://plotly.com"&gt;plotly&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a bar plot
&lt;/h2&gt;

&lt;p&gt;Creating a bar plot is done with a few lines of code.&lt;br&gt;
To get started install plotly and chart-studio&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install plotly==4.8.1 --user           
pip install chart-studio==1.0.0 --user
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A simple bar plot can be created like this:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import plotly.graph_objects as go
fig = go.Figure(data=go.Bar(y=[2, 3, 1]))
fig.show()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So the data in this case is a list with integers, but the list can contains different &lt;a href="https://python-commandments.org/python-data-types/"&gt;data types&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That opens up a server on localhost showing the bar plot. You can also save them to a file or host them online.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TaApniX4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i43u1cjdyzkv4mk6973h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TaApniX4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i43u1cjdyzkv4mk6973h.png" alt="plotly plot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To share them online, import chart_studio and set your api keys.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import chart_studio
chart_studio.tools.set_credentials_file(username='DemoAccount', api_key='lr1c37zw81')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That gives you this code:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import plotly.graph_objects as go
import chart_studio
import chart_studio.plotly as py

chart_studio.tools.set_credentials_file(username='DemoAccount', api_key='lr1c37zw81')

data = [go.Bar(y=[1,2,3,4,5,6])]
py.plot(data, filename='bar-plot')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After setting up, you will get a &lt;a href="https://chart-studio.plotly.com/~toebest/4/#/"&gt;bar chart like this&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Line chart
&lt;/h2&gt;

&lt;p&gt;If you want a line chart, you can change it. It's very important to change the filename, or it will overwrite your previous chart.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g1 = go.Scatter(x=[1, 2, 3, 4], y=[2, 4, 6, 8])
g2 = go.Scatter(x=[1, 2, 3, 4], y=[5, 10, 15, 20])

data = [g1,g2]
py.plot(data, filename='line-plot')
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That results in this &lt;a href="https://chart-studio.plotly.com/~toebest/6/#/"&gt;line chart demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nVLiAk-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6m5e9tehtroyma6h04o8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nVLiAk-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6m5e9tehtroyma6h04o8.png" alt="plotly line chart"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Why is this 'raw_input' detected as an error in Python?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Fri, 05 Jun 2020 22:39:05 +0000</pubDate>
      <link>https://dev.to/threadspeed/why-is-this-rawinput-detected-as-an-error-in-python-a1b</link>
      <guid>https://dev.to/threadspeed/why-is-this-rawinput-detected-as-an-error-in-python-a1b</guid>
      <description>&lt;p&gt;If you get this error, you may be using an old version of &lt;a href="https://python.org"&gt;Python&lt;/a&gt; or using old documentation.&lt;/p&gt;

&lt;p&gt;In Python 3, the &lt;code&gt;raw_input()&lt;/code&gt; function is no longer available, it's now deprecated.&lt;/p&gt;

&lt;p&gt;Python 3 is not backwards compatible with Python 2. You should be using Python 3 or newer. If you have old code, you'll have to port it. (&lt;a href="https://python-commandments.org/python-2-vs-3/"&gt;what's different&lt;/a&gt;?)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;PEP 3111: raw_input() was renamed to input(). That is, the new input() function reads a line from sys.stdin and returns it with the trailing newline stripped. It raises EOFError if the input is terminated prematurely. To get the old behavior of input()&lt;br&gt;
, use eval(input()).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  input()
&lt;/h2&gt;

&lt;p&gt;Python 3 comes with the method &lt;code&gt;input()&lt;/code&gt; to take keyboard input. It returns data in the form of a string, so you can do this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter x"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;But if you check the type, with &lt;code&gt;type(x)&lt;/code&gt; it will output that the data type is str. If you do not want that, you can &lt;a href="https://python-commandments.org/python-input-function/"&gt;cast the data&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can also cast it to a data type directly, if you don't want to do input validation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter x:"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;But it's wise to do input validation, a user might do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter x:"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;
    &lt;span class="n"&gt;Traceback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt; &lt;span class="n"&gt;recent&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
      &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;stdin&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nb"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;invalid&lt;/span&gt; &lt;span class="n"&gt;literal&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'hello'&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You could create a function for that&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;inputi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;         &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;         &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Wrong input, type integer."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;         &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;     &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;         &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inputi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter x:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inputi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter x:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;
    &lt;span class="n"&gt;Wrong&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="n"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you are new to Python, this is a good starting point &lt;a href="https://pythonbasics.org/"&gt;Learn Python&lt;/a&gt; or the &lt;a href="https://bsdnerds.org/learn-python/"&gt;Python shell tutorial&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Start with Programming, where to start?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Tue, 26 May 2020 22:48:50 +0000</pubDate>
      <link>https://dev.to/threadspeed/start-with-programming-where-to-start-7m5</link>
      <guid>https://dev.to/threadspeed/start-with-programming-where-to-start-7m5</guid>
      <description>&lt;p&gt;So you decided to learn programming, but where to start?&lt;/p&gt;

&lt;p&gt;With all the languages it can be overwhelming. If you are totally new, I recommend learning Python or Javascript.&lt;/p&gt;

&lt;p&gt;This is a collection of resources to help you out. That can be a good starting point, depending on your mode of learning (some people prefer books)&lt;/p&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;Python is a language that is "easy" for new programmers because of the many introductory resources and syntax. &lt;/p&gt;

&lt;p&gt;That said, it will take some time to master if you never programmed before. The language can be used on the Raspberry Pi but also on the desktop computer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bsdnerds.org/learn-python/"&gt;Introduction to Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonbasics.org/"&gt;Python basics tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonspot.com/"&gt;More resources for Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also learn from a book/course, I recommend &lt;a href="https://gumroad.com/l/dcsp"&gt;this one&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;p&gt;JavaScript is the language for the web. Every web app uses JavaScript and it's supported by all web browsers.&lt;/p&gt;

&lt;p&gt;Both JavaScript and Python work on all computer systems. But JavaScript will run directly with any website you put it on, on every device (including television, watch, mobile phone etc).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction"&gt;Mozillas introduction to Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://javascript.info/intro"&gt;An introduction to Javascript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>How do I display an Image in PyQt5/PySide2?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Sun, 24 May 2020 13:35:13 +0000</pubDate>
      <link>https://dev.to/threadspeed/how-do-i-display-an-image-in-pyqt5-pyside2-150p</link>
      <guid>https://dev.to/threadspeed/how-do-i-display-an-image-in-pyqt5-pyside2-150p</guid>
      <description>&lt;p&gt;The QPixmap class is used to display the image inside a PyQt/Pyside window, either as a QPainterDevice object or loaded into a control, usually a label or button. &lt;/p&gt;

&lt;p&gt;QPixmap can read image file types such as BMP, GIF, JPG, etc. If you want to &lt;a href="https://pythonpyqt.com/pyqt-gif/" rel="noopener noreferrer"&gt;display animated GIFs&lt;/a&gt;, you can use QMovie. PyQt can also &lt;a href="https://pythonprogramminglanguage.com/pyqt5-video-widget/" rel="noopener noreferrer"&gt;display videos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;QPixmap is one of the widgets used to process images. It is optimized for displaying images on the screen. In our code example, we will use QPixmap to display the image on the window.&lt;/p&gt;

&lt;p&gt;If you are new to PyQt, I suggest &lt;a href="https://gumroad.com/l/pysqtsamples" rel="noopener noreferrer"&gt;this course/book&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  PyQt show image
&lt;/h2&gt;

&lt;p&gt;The code below loads an image using a QPixmap. It attaches the QPixmap to a QLabel. The label is added to an &lt;a href="https://pythonpyqt.com/pyqt-box-layout/" rel="noopener noreferrer"&gt;QHBoxLayout&lt;/a&gt; and the QHboxLayout to the window.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;PyQt5.Qt&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QHBoxLayout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                          
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;PyQt5.QtGui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QPixmap&lt;/span&gt;                                                                                                            
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;                                                                                                                                 

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                    
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                    
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                 
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initUI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                      

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initUI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                      
        &lt;span class="n"&gt;hbox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QHBoxLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                           
        &lt;span class="n"&gt;pixmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cat.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                        

        &lt;span class="n"&gt;lbl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                 
        &lt;span class="n"&gt;lbl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pixmap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                              

        &lt;span class="n"&gt;hbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lbl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hbox&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                               

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setWindowTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Image with PyQt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                             
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                        

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                 

    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                           
    &lt;span class="n"&gt;ex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                         
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;      


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsj0031u8ufvqkfmo3prb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsj0031u8ufvqkfmo3prb.png" alt="qpixmap show image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our example, we display the image on the window.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;pixmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cat.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We create a QPixmap object. It takes the name of the file as an argument.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;lbl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;lbl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pixmap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We put the pixmap into the QLabel widget. &lt;br&gt;
Alternatively you can use &lt;a href="https://pythonbasics.org/qt-designer-python/" rel="noopener noreferrer"&gt;designer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  PySide2 show image
&lt;/h2&gt;

&lt;p&gt;The PySide2 version is similar. Both the PyQt and PySide toolkits are actively maintained, and by now more or less equal in features and quality. There are only few, rather unimportant differences.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;                                                                                                                                 
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;PySide2.QtGui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QPixmap&lt;/span&gt;                                                                                                          
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;PySide2.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QMainWindow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;                                                                            

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MainWindow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QMainWindow&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                             

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                    
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MainWindow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                 
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Load image in PySide2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;                                                                                               
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setWindowTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                    

        &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                               
        &lt;span class="n"&gt;pixmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cat.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                        
        &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPixmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pixmap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                            
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCentralWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                       
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pixmap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;width&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;pixmap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;height&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;                                                                                       

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                               
&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MainWindow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                           
&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                                   
&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gumroad.com/l/pysqtsamples" rel="noopener noreferrer"&gt;Course: Create Desktop Apps with PyQt5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonspot.com/gui/" rel="noopener noreferrer"&gt;More on Python PyQt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>pyqt</category>
    </item>
    <item>
      <title>How can I create a directly-executable cross-platform GUI app using Python?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Fri, 22 May 2020 12:37:14 +0000</pubDate>
      <link>https://dev.to/threadspeed/how-can-i-create-a-directly-executable-cross-platform-gui-app-using-python-19mg</link>
      <guid>https://dev.to/threadspeed/how-can-i-create-a-directly-executable-cross-platform-gui-app-using-python-19mg</guid>
      <description>&lt;p&gt;The &lt;a href="https://python.org"&gt;Python&lt;/a&gt; programming language works on many platforms including Microsoft Windows, Apple Mac OS X, many Linux distributions other systems.&lt;/p&gt;

&lt;p&gt;This article consists of two parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GUI module&lt;/strong&gt; - how to create a desktop interface with Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python to Executable&lt;/strong&gt; - turn a Python program into an executable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hardest part is learn Python, how to use a GUI module. To create an executable, there are several command line tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  GUI module
&lt;/h2&gt;

&lt;p&gt;The first thing you will need is a &lt;a href="https://pythonspot.com/gui/"&gt;GUI&lt;/a&gt; module. Of course, there are many GUI modules for Python. The most commonly used GUI modules are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://pythonbasics.org/tkinter/"&gt;Tkinter&lt;/a&gt; - this module is based on the old Tk GUI toolkit. It is the default GUI library for python and it is free for commercial projects. Tk is rather limited with the number of widgets and has an old design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DVS5cpMP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q4jgmoor6upfcye3woa4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DVS5cpMP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q4jgmoor6upfcye3woa4.png" alt="tkinter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://pythonpyqt.com/"&gt;PyQt&lt;/a&gt; - Python bindings for the Qt framework. It's free (gpl) but not for commercial products. Qt comes with many widgets and features and is under continuous development. If you are new to PyQt, I recommend this &lt;a href="https://gumroad.com/l/pysqtsamples"&gt;course &amp;amp; book&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9XxtssuX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4432n9qhvonluhyaw6hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9XxtssuX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4432n9qhvonluhyaw6hd.png" alt="pyqt has many widgets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikibooks.org/wiki/PyGTK_For_GUI_Programming/First_Steps"&gt;PyGTK&lt;/a&gt;, a wrapper on the GTK toolkit. The gnome (gtk) desktop environment is an option on Linux systems. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python is interpreted
&lt;/h2&gt;

&lt;p&gt;Strictly speaking, you don't have to compile python for Mac/Windows/Linux because it is an &lt;a href="https://pythonprogramminglanguage.com/repl/"&gt;interpreted&lt;/a&gt; language.&lt;/p&gt;

&lt;p&gt;That means that if you have the Python interpreter installed on the platform and the required modules, you can run the program.&lt;/p&gt;

&lt;p&gt;Python is installed on every Linux, Mac and Windows OS (I think) by default now. So all you need is have the non-standard modules installed if you use them.&lt;/p&gt;

&lt;p&gt;However, your end-users may not be familiar with Python and other installing modules, so you may want to create an executable and an installer.&lt;/p&gt;

&lt;p&gt;It is possible to build executables with the python interpreter, which we will discuss in the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create executable
&lt;/h2&gt;

&lt;p&gt;After you made your GUI program in Python, you can convert it into a standalone executable. There are several tools that can do this, there is more than one way to do this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross platform, all platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pyinstaller.org/"&gt;PyInstaller&lt;/a&gt; - PyInstaller freezes Python apps into stand-alone executables for Windows, Linux, Mac OS X, FreeBSD, Solaris and AIX. It supports Python 2.7 and Python 3.3, 3.4, 3.5 and 3.6.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First install it with the &lt;a href="https://pythonbasics.org/how-to-use-pip-and-pypi/"&gt;pip&lt;/a&gt; package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install pyinstaller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then run pyinstaller in your programs folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyinstaller file.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://build-system.fman.io/"&gt;fbs&lt;/a&gt; - package Python apps that use PyQt. See &lt;a href="https://pythonbasics.org/compile-pyqt-to-exe/"&gt;Python PyQt to executable&lt;/a&gt;. fbs is not free for commercial use, but for non-commercial use it's free. It comes with setup program for your end-users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e-4A3mws--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/re1jzsmg1up46fwb4v7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e-4A3mws--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/re1jzsmg1up46fwb4v7i.png" alt="fbs setup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows executable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://py2exe.org/"&gt;py2exe&lt;/a&gt; - converts your Python program to a windows executable. It's only for building executables on Windows, you can't build a Windows executable from Linux or Mac OS X.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Linux executable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://wiki.python.org/moin/Freeze"&gt;Freeze&lt;/a&gt; - works like py2exe but for the Linux platform
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python freeze.py hello.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mac executable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://py2app.readthedocs.io/en/latest/"&gt;py2app&lt;/a&gt; - create Mac OS executables from Python. py2app is similar in purpose and design to py2exe for Windows.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>PyQt QInputDialog</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Fri, 22 May 2020 10:24:14 +0000</pubDate>
      <link>https://dev.to/threadspeed/pyqt-qinputdialog-3gf8</link>
      <guid>https://dev.to/threadspeed/pyqt-qinputdialog-3gf8</guid>
      <description>&lt;p&gt;With PyQt you can create a QInputDialog (graphical input dialog). PyQT is a &lt;a href="https://pythonprogramminglanguage.com/pyqt/"&gt;GUI module&lt;/a&gt; for &lt;a href="https://python.org"&gt;Python&lt;/a&gt;. It's a binding for the popular &lt;a href="https://qt.io"&gt;Qt&lt;/a&gt; framework.&lt;/p&gt;

&lt;p&gt;A dialog without input is called a &lt;a href="https://pythonspot.com/pyqt5-messagebox/"&gt;messagebox&lt;/a&gt; (QMessageBox).&lt;/p&gt;

&lt;p&gt;The input dialog typically consists of a &lt;a href="https://pythonbasics.org/qlineedit/"&gt;text box&lt;/a&gt; and two &lt;a href="https://pythonpyqt.com/pyqt-button/"&gt;buttons&lt;/a&gt;, the user clicks OK (or Enter), the Dialog collects the input data and returns.&lt;/p&gt;

&lt;p&gt;The available dialogs are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QInputDialog.getText One line of text&lt;/li&gt;
&lt;li&gt;QInputDialog.getMultiLineText multi-line text&lt;/li&gt;
&lt;li&gt;QInputDialog.getDouble floating point&lt;/li&gt;
&lt;li&gt;QInputDialog.getInt Integer&lt;/li&gt;
&lt;li&gt;QInputDialog.getItem entry selection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j-LDb3Qh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t3zvc6hyzuamrp9zkouq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j-LDb3Qh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/t3zvc6hyzuamrp9zkouq.png" alt="pyqt qinputdialog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  QInputDialog example
&lt;/h2&gt;

&lt;p&gt;The example below creates various input dialogs. It includes the single line, multi line, double/float input, integer input and a select box.&lt;/p&gt;

&lt;p&gt;It shows them one by one in series, not all at once. You have to click an option to show the next dialog.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;                                                                                                                                 
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QDialog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;                                                      
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.Qt&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Qt&lt;/span&gt;                                                                                                                    

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                        
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                    
        &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                 
        &lt;span class="c1"&gt;# text input                                                                                                                                    
&lt;/span&gt;        &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'getText'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Enter text'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                     
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                    
            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                    

        &lt;span class="c1"&gt;# multi-line input                                                                                                                       
&lt;/span&gt;        &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getMultiLineText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'getMultiLineText'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Story'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Enter story"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                         
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                    
            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                    

        &lt;span class="c1"&gt;# enter double                                                                                                                 
&lt;/span&gt;        &lt;span class="n"&gt;double&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getDouble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'getDouble'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Enter double'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;22.33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                    
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                             
            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                  

        &lt;span class="c1"&gt;# enter integer                                                                                                                                   
&lt;/span&gt;        &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'getInteger'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Enter number'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                   
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                             
            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                     

        &lt;span class="c1"&gt;# select option                                                                                                                                   
&lt;/span&gt;        &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Spring"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Summer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Fall"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Winter"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                                                                                     
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QInputDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'getItem'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'Favourite season'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                              

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                    
            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                                    

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                 
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                           
    &lt;span class="n"&gt;ex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                             
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;   
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Related links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gumroad.com/l/pysqtsamples"&gt;PyQt course and book&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonpyqt.com/"&gt;PyQt articles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>PyQt GUI with Python</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Fri, 22 May 2020 09:44:32 +0000</pubDate>
      <link>https://dev.to/threadspeed/pyqt-gui-with-python-1plk</link>
      <guid>https://dev.to/threadspeed/pyqt-gui-with-python-1plk</guid>
      <description>&lt;p&gt;PyQt is a cross-platform toolkit for creating GUI applications that integrates &lt;a href="https://python.org"&gt;Python&lt;/a&gt; with the &lt;a href="https://qt.io"&gt;Qt&lt;/a&gt; library. &lt;/p&gt;

&lt;p&gt;That is, PyQt allows the use of the Python language to call APl from the Qt library, greatly improving development efficiency while retaining Qt's high operational efficiency.&lt;/p&gt;

&lt;p&gt;Because it's much faster to develop programs in Python than in C++, PyQt wraps Qt completely and can do almost anything Qt can do with PyQt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Create an instance of the QApplication class
&lt;/span&gt;    &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#Create a window
&lt;/span&gt;    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#Setting the window size
&lt;/span&gt;    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#move window
&lt;/span&gt;    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setWindowTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The first PyQt5-based desktop application"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#setWindowTitle
&lt;/span&gt;    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;#display window
&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;#Enters the main loop of the program and ensures the main loop ends safely with the exit function
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7Qkz7uZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m42u2br1gvra9wash1j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7Qkz7uZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m42u2br1gvra9wash1j7.png" alt="pyqt window"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The function of app.exec_() is to run the main loop, which must be called to start the event processing, and the method is called to enter the main loop of the program until the exit() is called.&lt;/p&gt;

&lt;p&gt;If you are new to PyQt, I recommend &lt;a href="https://gumroad.com/l/pysqtsamples"&gt;this book&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  QApplication
&lt;/h2&gt;

&lt;p&gt;The QApplication class manages the control flow and major settings of GUI applications. It can be said that QApplication is the lifeblood of Qt's entire back-office management.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Create an instance of the QApplication class
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It contains the main event loop in which all events from the window system and other resources are processed and scheduled. &lt;/p&gt;

&lt;p&gt;It also handles the initialization and termination of applications and provides conversation management. It also handles most system-wide and application-wide settings.&lt;/p&gt;

&lt;p&gt;For any &lt;a href="https://en.wikipedia.org/wiki/Graphical_user_interface"&gt;GUI application&lt;/a&gt; that uses &lt;a href="https://qt.io"&gt;Qt&lt;/a&gt;, there has to be a QApplication object&lt;/p&gt;

&lt;h2&gt;
  
  
  QWidget
&lt;/h2&gt;

&lt;p&gt;The QWidget class is the base class for all user interface objects. This includes &lt;a href="https://pythonpyqt.com/pyqt-button/"&gt;buttons&lt;/a&gt;, &lt;a href="https://pythonbasics.org/pyqt-hello-world/"&gt;labels&lt;/a&gt;, &lt;a href="https://pythonprogramminglanguage.com/pyqt-line-edit/"&gt;text input&lt;/a&gt;, &lt;a href="https://pythonpyqt.com/pyqt-progressbar/"&gt;progressbar&lt;/a&gt;, &lt;a href="https://pythonspot.com/pyqt5-messagebox/"&gt;messagebox&lt;/a&gt; and a lot more.&lt;/p&gt;

&lt;h2&gt;
  
  
  QDialog
&lt;/h2&gt;

&lt;p&gt;The QDialog class is the base class of the dialog window. This lets you create dialogs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zSB-DG5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/exxrgw63gze2l7qbie9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zSB-DG5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/exxrgw63gze2l7qbie9i.png" alt="qdialog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  QMainWindow
&lt;/h2&gt;

&lt;p&gt;The QMainWindow class provides a main application window with &lt;a href="https://pythonprogramminglanguage.com/pyqt-menu/"&gt;menu bars&lt;/a&gt;, &lt;a href="https://pythonbasics.org/pyqt-toolbar/"&gt;toolbars&lt;/a&gt;, &lt;a href="https://pythonspot.com/pyqt5-statusbar/"&gt;status&lt;/a&gt; bars (e.g., IDE-Visual Studio, Qt Creator, etc.) that is commonly used for developing &lt;a href="https://qt.io"&gt;Qt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A main window provides the user interface framework for building the application. qt has QMainWindow and its related classes to manage the main window&lt;/p&gt;

&lt;h2&gt;
  
  
  QWebEngineView
&lt;/h2&gt;

&lt;p&gt;PyQt5 uses the QWebEngineView control to display HTML pages. Older versions of the &lt;a href="https://pythonprogramminglanguage.com/webkit-browser/"&gt;QWebView&lt;/a&gt; class are not maintained because QWebEngineView uses the Chromium kernel to give users a better experience.&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>GUI Library for Python</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Thu, 21 May 2020 23:25:44 +0000</pubDate>
      <link>https://dev.to/threadspeed/gui-library-for-python-3g7c</link>
      <guid>https://dev.to/threadspeed/gui-library-for-python-3g7c</guid>
      <description>&lt;p&gt;In general, choosing a GUI toolkit for an application can be tricky. &lt;/p&gt;

&lt;p&gt;Programmers who use &lt;a href="https://python.org"&gt;Python&lt;/a&gt; (and many languages as well) have a wide variety of &lt;a href="https://pythonspot.com/gui/"&gt;GUI toolkits&lt;/a&gt; to choose from, and each has its own advantages and disadvantages. &lt;/p&gt;

&lt;p&gt;Some are faster than others, some are smaller, some are easy to install, and some are more suitable for cross-platform use (for this, also note that some support specific features you need to meet). Of course, the various libraries have various licenses accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python GUI modules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  tkinter
&lt;/h3&gt;

&lt;p&gt;For Python programmers, the default GUI choice is Tk (bound via Tkinter) - for obvious reasons. tkinter and the &lt;a href="https://docs.python.org/3/library/idle.html"&gt;idle IDE&lt;/a&gt; were written by Python's founders, and they came about as the default choice for most Python distributions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TA4CSkp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f5og4bbgrg4p5qqgouyl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TA4CSkp6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f5og4bbgrg4p5qqgouyl.png" alt="tkinter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The standard Python documentation discusses Tkinter, but does not address any other GUI bindings. It was intentional! To say the least, if Tk and Tkinter weren't so bad, programmers would have no reason to look for alternatives. &lt;/p&gt;

&lt;h3&gt;
  
  
  PyQt
&lt;/h3&gt;

&lt;p&gt;PyQt has far more advantages than Tkinter (which also has several disadvantages);&lt;/p&gt;

&lt;p&gt;PyQt is a Python binding for the Qt framework. Qt and PyQt are completely object-oriented in design; and Qt provides a well-designed collection of window building blocks that are much larger than what Tk provides. &lt;/p&gt;

&lt;p&gt;Some of the PyQt widgets are shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gKKM8YpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2cq9ucz1guwj31wlhdcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gKKM8YpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2cq9ucz1guwj31wlhdcv.png" alt="pyqt widgets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are new to PyQt, I recommend &lt;a href="https://gumroad.com/l/pysqtsamples"&gt;this book and course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In terms of its drawbacks, Qt's license is more restricted than many toolkits (at least for non-Linux platforms); Qt is a fairly large library. &lt;/p&gt;

&lt;p&gt;PyQt strictly follows Qt's licensing. In particular, it is available for &lt;a href="https://en.wikipedia.org/wiki/GNU_General_Public_License"&gt;GPL&lt;/a&gt; on the UNIX/X11 platform and for commercial purposes there's another license.&lt;/p&gt;

&lt;p&gt;Qt uses a mechanism called &lt;a href="https://pythonspot.com/pyqt5-signals-and-slots/"&gt;signals/slots&lt;/a&gt; to pass events and messages between window artifacts (and other objects). This mechanism is completely different from the callback mechanism used in most toolkits, including Tkinter. &lt;/p&gt;

&lt;p&gt;The larger the application, the more important this advantage of PyQt becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  GUI Demo App: log counter
&lt;/h2&gt;

&lt;p&gt;To show the contrast between the signal/slot and the callback, we provide a write-and-play application that uses Tkinter and PyQt. &lt;/p&gt;

&lt;p&gt;The application consists of four window components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Quit" button (to quit)&lt;/li&gt;
&lt;li&gt;"Log Timestamp" button (for messages)&lt;/li&gt;
&lt;li&gt;A text area that displays a scrollable list of time stamps for logged logs&lt;/li&gt;
&lt;li&gt;Message window component that displays the number of time stamps for logged&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tkinter example
&lt;/h3&gt;

&lt;p&gt;In Tkinter, we can implement the application like this.&lt;/p&gt;

&lt;p&gt;Logger Tkinter application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tkinter&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BOTH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Timestamp logging app"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tslist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringVar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cntdisp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Sans'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                               &lt;span class="n"&gt;textvariable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Log Timestamp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                          &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Quit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LEFT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cntdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TOP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BOTH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;side&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BOTTOM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BOTH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;stamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ctime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stamp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;see&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tslist&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"% 3d"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tslist&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;mainloop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This Tk version uses the log_timestamp() method as the command= parameter for the button. In &lt;a href="https://pythonbasics.org/tkinter-button/"&gt;tkinter buttons&lt;/a&gt; are linked with a callback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Log Timestamp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                          &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That means on click, it calls that method.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lbprN4Xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i0hili1w8j4cx772m4zz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lbprN4Xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i0hili1w8j4cx772m4zz.png" alt="tkinter example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PyQt example
&lt;/h3&gt;

&lt;p&gt;In Python PyQt, you can implement the app like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QGridLayout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QTextEdit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QHBoxLayout&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QGridLayout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setColumnStretch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QTextEdit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setMinimumSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tscount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;Log Timestamp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;Quit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tscount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;stamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ctime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tscount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toPlainText&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Gpm4y8c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pwft6mwbwg6oqfo1y7j2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Gpm4y8c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pwft6mwbwg6oqfo1y7j2.png" alt="pyqt example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By creating the Layout Manager, the Logger class got to work. A layout manager is a complex topic in any GUI system, but Qt's implementation makes it simple. &lt;/p&gt;

&lt;p&gt;In most cases, you will use &lt;a href="https://pythonbasics.org/qt-designer-python/"&gt;Qt Designer&lt;/a&gt; to create a general GUI design, which can then be used to generate Python or C++ code. You can then make the generated code generate subclasses to add functionality.&lt;/p&gt;

&lt;p&gt;But in this example, we choose to create the layout manager manually. The window building blocks are placed in individual cells of the &lt;a href="https://pythonpyqt.com/pyqt-grid-layout/"&gt;grid layout&lt;/a&gt;, or can be placed across multiple cells.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QGridLayout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setColumnStretch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tsdisp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The most interesting part of the app is where we connect the &lt;a href="https://pythonprogramminglanguage.com/pyqt5-button/"&gt;clicked signal&lt;/a&gt; to the function. &lt;/p&gt;

&lt;p&gt;One button connects to the log_timestamp method; the other connects to the close method of the QWidget class.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log_timestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>python</category>
    </item>
    <item>
      <title>Is Golang better than C?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Thu, 21 May 2020 18:10:12 +0000</pubDate>
      <link>https://dev.to/threadspeed/is-golang-better-than-c-4n73</link>
      <guid>https://dev.to/threadspeed/is-golang-better-than-c-4n73</guid>
      <description>&lt;p&gt;&lt;a href="https://golang.org"&gt;Golang&lt;/a&gt; is like C if it was designed today. So what are the differences? In this article we'll discuss this.&lt;/p&gt;

&lt;p&gt;C has been around for ages and Go is a new language that's only been around for around a decade. The similarities with C are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit in as many things&lt;/li&gt;
&lt;li&gt;Minimal syntax.&lt;/li&gt;
&lt;li&gt;Commonly done operations into the syntax.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike C, Golang is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is not a general-purpose language, but language to replace C++ for back-end server applications.&lt;/li&gt;
&lt;li&gt;Go doesn’t have all the header file headaches of C&lt;/li&gt;
&lt;li&gt;Has built-in support for concurrency using &lt;a href="https://golangr.com/goroutines/"&gt;goroutines&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Has a dedicated operator for turning off a bit: &amp;amp;^.&lt;/li&gt;
&lt;li&gt;Doesn’t require odd, unreadable pointer syntax for function pointers.&lt;/li&gt;
&lt;li&gt;Doesn’t require ; semicolons to end statements&lt;/li&gt;
&lt;li&gt;Has declaration type inference.&lt;/li&gt;
&lt;li&gt;Compromise between object-oriented programming and &lt;a href="https://golangr.com/methods/"&gt;procedural&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Has a garbage collector &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is much more pleasant to program in Go than in C.&lt;/p&gt;

&lt;p&gt;But, Go isn’t really suitable for systems programming like OS kernels or device drivers. Nor is it suitable for embedded programming where you need direct realtime hardware access.&lt;/p&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>Which features does PyQt possess that Tkinter lacks? </title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Thu, 21 May 2020 16:07:44 +0000</pubDate>
      <link>https://dev.to/threadspeed/which-features-does-pyqt-possess-that-tkinter-lacks-2d73</link>
      <guid>https://dev.to/threadspeed/which-features-does-pyqt-possess-that-tkinter-lacks-2d73</guid>
      <description>&lt;p&gt;Both PyQt and Tkinter are GUI modules for &lt;a href="https://python.org"&gt;Python&lt;/a&gt;, but PyQt comes with additional features like networking, databases etc.&lt;/p&gt;

&lt;p&gt;PyQt is a binding for &lt;a href="https://qt.io"&gt;Qt&lt;/a&gt; is probably the best cross-platform interface toolkit available right now, Tkinter may give you some troubles here.&lt;/p&gt;

&lt;p&gt;If you don't know Python yet, you should &lt;a href="https://pythonspot.com"&gt;learn Python&lt;/a&gt; before trying to make GUI apps with Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Look and feel
&lt;/h2&gt;

&lt;p&gt;PyQt (Qt) is stable, mature, cross-platform and completely native. Tkinter generally looks like a few decades ago.&lt;/p&gt;

&lt;p&gt;Take a look at these calculator applications, the first one in tkinter and the next one in pyqt.&lt;/p&gt;

&lt;p&gt;Tkinter look and feel:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1joN5e_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jnxg9rawc62rt5rmlfkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1joN5e_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jnxg9rawc62rt5rmlfkf.png" alt="tkinter calculator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PyQt look and feel:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IJX5IsFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uexv078nlasqt94jxqre.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IJX5IsFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uexv078nlasqt94jxqre.jpg" alt="pyqt calculator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PyQt can adapt to the style of your operating system:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IKoByH_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ivoiz3cr5ujt11hwb40w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IKoByH_y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ivoiz3cr5ujt11hwb40w.png" alt="pyqt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Widgets
&lt;/h2&gt;

&lt;p&gt;For small apps Tkinter can be a good choice, but it comes with a limited number of widgets. PyQt comes with many widgets and a &lt;a href="https://pythonbasics.org/qt-designer-python/"&gt;designer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PyQt is supported by the Qt company, so it keeps getting more and more features. Tkinter has had the same number of widgets for over a decade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;PyQt uses a signal-slot system that takes some time getting used to. Tk works on an old fashioned callback system. &lt;/p&gt;

&lt;p&gt;For PyQt there's a lot more learning resources available than Tkinter. But it has a steeper learning curve, Tkinter is very small so easy to learn.&lt;/p&gt;

&lt;p&gt;Here are some resources to learn PyQt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gumroad.com/l/pysqtsamples"&gt;PyQt course and book&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonprogramminglanguage.com/pyqt5-hello-world/"&gt;Hello world example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonpyqt.com/contents/"&gt;Collection of examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To learn Tkinter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/tkinter.html"&gt;Tkinter on Python docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonbasics.org/#Tkinter"&gt;Tkinter examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>What are some sites or books to learn PyQt? </title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Thu, 21 May 2020 15:23:38 +0000</pubDate>
      <link>https://dev.to/threadspeed/what-are-some-sites-or-books-to-learn-pyqt-1o14</link>
      <guid>https://dev.to/threadspeed/what-are-some-sites-or-books-to-learn-pyqt-1o14</guid>
      <description>&lt;p&gt;PyQt has quite a hard learning curve. It lets you make desktop software with &lt;a href="https://python.org"&gt;Python&lt;/a&gt; and comes with many widgets. If you are just starting with PyQt you can feel a bit overwhelmed. At the same time, its a useful skill to have for your career.&lt;/p&gt;

&lt;p&gt;It's a very mature module that has been around for a long time. There is a lot of software developed with PyQt (&lt;a href="https://qt.io"&gt;Qt&lt;/a&gt;) so it makes sense to learn it. But where to start?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FElHyKS5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z2cy02mepr7wmdui9r2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FElHyKS5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z2cy02mepr7wmdui9r2o.png" alt="pyqt lets you build desktop software with python"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn PyQt
&lt;/h2&gt;

&lt;p&gt;Here are some resources that help you learn Python PyQt.&lt;/p&gt;

&lt;p&gt;The book and course &lt;a href="https://gumroad.com/l/pysqtsamples"&gt;Create Desktop Apps with Python PyQt5&lt;/a&gt; gets you started very fast and is one of the most popular resources. It comes with many examples, videos and a lot more.&lt;/p&gt;

&lt;p&gt;The site &lt;a href="https://pythonbasics.org/#PyQt"&gt;pythonbasics&lt;/a&gt; has many individual articles on PyQt programming. It goes over the various widgets and features of PyQt.&lt;/p&gt;

&lt;p&gt;You can find more examples on &lt;a href="https://pythonspot.com/pyqt5/"&gt;pythonspot&lt;/a&gt;, on this &lt;a href="https://pythonpyqt.com/"&gt;pyqt site&lt;/a&gt; and &lt;a href="https://pythonprogramminglanguage.com/pyqt5-hello-world/"&gt;this resource&lt;/a&gt;. These are all lose articles so you have to search around a bit to figure things out.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://doc.qt.io/"&gt;Qt documentation&lt;/a&gt; is a good reference if you have experience with PyQt. Al though it is for C++ its still a useful reference when programming with PyQt because a lot of things overlap (PyQt is a binding for Qt)&lt;/p&gt;

</description>
      <category>pyqt</category>
    </item>
    <item>
      <title>Is PYQT hard to use for Python beginners?</title>
      <dc:creator>threadspeed</dc:creator>
      <pubDate>Wed, 20 May 2020 17:41:22 +0000</pubDate>
      <link>https://dev.to/threadspeed/is-pyqt-hard-to-use-for-python-beginners-2lo4</link>
      <guid>https://dev.to/threadspeed/is-pyqt-hard-to-use-for-python-beginners-2lo4</guid>
      <description>&lt;p&gt;No, it's quite user-friendly after you learned the &lt;a href="https://pythonbasics.org/"&gt;Python basics&lt;/a&gt;. PyQt is a GUI module for Python.&lt;/p&gt;

&lt;p&gt;There is lots of material to learn Pyqt, like &lt;a href="https://gumroad.com/l/pysqtsamples"&gt;this book&lt;/a&gt; or &lt;a href="https://pythonpyqt.com/"&gt;howto&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unlike other GUI modules, PyQt comes with a &lt;a href="https://pythonbasics.org/qt-designer-python/"&gt;designer&lt;/a&gt; program that lets you drag and drop your GUI elements on your window. You can then export it as .ui file and load it in Python.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S3nPYJRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fu95gbkzi0oltrp9yhln.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S3nPYJRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fu95gbkzi0oltrp9yhln.jpg" alt="pyqt designer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So once you know the basics of Python, it's very easy to learn because there is a lot of training material and even a GUI designer. This makes it very easy to create desktop applications with Python. &lt;/p&gt;

&lt;p&gt;In fact, there are many many tutorials for PyQt. Here is a short list of tutorials for creating a GUI with PyQt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pythonbasics.org/#PyQt"&gt;PyQt articles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonspot.com/pyqt5/"&gt;PyQt tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonpyqt.com/"&gt;Brief howto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pythonprogramminglanguage.com/pyqt/"&gt;More PyQt lessons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what the "hello world" app looks like with PyQt. If you know Python and objects/classes it's straight forward, but without knowing it can be hard to grasp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QVBoxLayout&lt;/span&gt;                                                                
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtCore&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Qt&lt;/span&gt;                                                                                                                

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Window&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                     
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                    
        &lt;span class="n"&gt;QWidget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                             
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QPushButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello World'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                     
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clicked&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;handleButton&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                     
        &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QVBoxLayout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                         
        &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                      

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handleButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;                                                                                                                
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello World'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                              

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                                 
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;                                                                                                                             
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                                                                                           
    &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Window&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                      
    &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                                                                                                          
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>pyqt</category>
    </item>
  </channel>
</rss>
