Inkscape Community

Help Using Inkscape => Beyond the Basics => Topic started by: HaroldTang on June 13, 2019, 12:58:53 AM

Title: About add hover information and login using extension
Post by: HaroldTang on June 13, 2019, 12:58:53 AM
Hi all, I am a novice developer in Inkscape Extension developing. I am using Windows 10, python 2.7, MySQL and pymysql package to develop a python script to draw circuit diagram.

With the help of the InkscapeMadeEasy extension, I am able to draw svg circuit components and they are so cool! Thanks a lot!

Here is the question, I want to display a text component with extra information hovering above the component. When user move the mouse over the text component, an information window will pop out in the Inkscape.
I notice that there are multiple ways to display it in the web browser(using JS or CSS, etc), but can I display it directly in the Inkscape? I want to display the corresponding values to help user to draw on this diagram with the retrieved information so it has to be in the software rather than in a web browser. Is it possible and can someone give me some ideas? I really appreciate it.

Another question. Can I do the user login function in extension to visit specific information in MySQL database? That is to say, can I keep user login information(like username and password) in one extension and another window pop out for further selection? Thanks a lot!!!
Title: Re: About add hover information and login using extension
Post by: brynn on June 13, 2019, 08:29:15 PM
Welcome to the forum!

I can't be much help with this.  Writing extensions is beyond my ability.  But we have other members who can probably help.

I was just thinking whether I've seen any current extensions which do what you're describing, but I can't think of any.  There might be some, I just haven't seen it.

The closest thing I've seen is Extensions menu > Visualize Path > Measure Path.  This extension puts a text object on the page, showing the measurement that was requested.  I know it's not hover text, like you described.  It's just the closest thing I've seen.

Typically in Inkscape the status bar is used to give info to the user.  Maybe that would be an option?  In extensions, I've occassionally seen a little window which typically contains Traceback info, but sometimes has an error message.  There might be some way to use that?

Hopefully someone else will be along shortly, who can give you more concrete info.  If not, I would suggest trying the development chat channel https://chat.inkscape.org/channel/team_devel  Or the development mailing list:  https://lists.inkscape.org/postorius/lists/?all-lists
Title: Re: About add hover information and login using extension
Post by: HaroldTang on June 14, 2019, 12:48:06 AM
Hi brynn,thank you for your suggestion!

I found that the text generated by Measure Path extension is not what I want cause it generates another text component, but I would use it as an alternative if I can't figure this out eventually.

Besides, this Measure Path extension menu has a tab for user to choose different input options, it solves a huge problem for me! I was wondering how to create different input options for different user demands, and it solves this problem perfectly! Many thanks!!

For the little error window suggestion, I saw a function called "inkex.errormsg()" in the source code. However, if this errormsg window is raised, the whole software is not accessible until I close this window, and I can't return to this page again. So it is not desirable for this situation.

Again, thanks a lot for your help! :th: I would keep waiting for others' opinions!
Title: Re: About add hover information and login using extension
Post by: Moini on June 14, 2019, 04:42:09 AM
but can I display it directly in the Inkscape?

- No, not like a bubble. You can add an inkscape:label, that will then be visible in the 'Objects' dialog.

Can I do the user login function in extension to visit specific information in MySQL database? That is to say, can I keep user login information(like username and password) in one extension and another window pop out for further selection?

- Yes, I think that would be possible. Some people use multiple extensions for this purpose (see gcodetools). Extensions can only access their own preference settings, though, so you may need to save the login data to a file. Or you can write an interactive extension in, say, Tkinter or any other GUI framework of your choice.
Title: Re: About add hover information and login using extension
Post by: HaroldTang on June 14, 2019, 05:32:57 PM
Hi Moini,

Thank you for your explanation!

For the text bubble, I decide to communicate with my client and show the objects dialog to them instead of the hover effect and explain this to them.

For the login function, I would start learning the Tkinter GUI now, and thank you so much for the suggestion!

 :ur:
Title: Re: About add hover information and login using extension
Post by: HaroldTang on June 20, 2019, 07:08:12 PM
Hello everyone,

I have implemented the login module and save the username in a local file. Now I need to import this username into another extension to complete the SQL query. I want to display this information in the extension window, like "Current login user: XXX". Can I write a dynamic text to show it in the window?

I notice that in most extensions, the .inx files always show some static description text. Can I read the local file and display it directly in the extension window?

Thank you!
Title: Re: About add hover information and login using extension
Post by: Moini on June 21, 2019, 04:24:35 AM
No. You would have to write your own GUI to display dynamic content. E.g. use tkinter, as mentioned above.
Title: Re: About add hover information and login using extension
Post by: HaroldTang on June 21, 2019, 05:14:15 PM
Thank you for the reply!
Title: Re: About add hover information and login using extension
Post by: HaroldTang on July 12, 2019, 02:19:40 AM
Hi, all.

I have a new question about display the result. I have done the query part and get a result for displaying. But I have initialized the program with the Tkinter and I can't write it on the canvas with the Inkex module. I set the button to create the new object like
Code: [Select]
 root = SVGWriting(self, some text )     root.affect()
and I set the SVGWriting class as normal inkscape extension script.  But when I click on this button, nothing happened and sometimes this program will crash.

I search the solution on the Github and saw someone putting the inkex module as the class and set the Tkinter as part of them. Is this necessary for the text drawing on the canvas?

Thank you for your help!
Title: Re: About add hover information and login using extension
Post by: Moini on July 12, 2019, 05:59:09 AM
I'm not sure what you're trying to do. The extension needs to finish and close before Inkscape will go on, and display any changes. Is that the block you're hitting?
Title: Re: About add hover information and login using extension
Post by: HaroldTang on July 12, 2019, 05:20:25 PM
Hi Moini,

I use the Tkinter for the user interface and the button is inside this window. When user clicks on the button, the content will be retrieved from tkinter class and I want to set as a text component in the SVG file with the code
Code: [Select]
inkex.etree.subelement(layer, inkex.addNS('text', 'svg'))

The problem is these two parts are in separate classes and how can I set the button's function to initialize another class's object and when should I call the Effect.affect()? If I write this query part and display part in two extensions, the code is working but I just want to combine them together.
Title: Re: About add hover information and login using extension
Post by: Moini on July 13, 2019, 04:21:47 AM
Mmh. Have a look at InkStitch, maybe, to learn. It uses wxPython, but aside from that, it should work in a similar way as what you intend to do.
https://github.com/inkstitch/inkstitch