Skip to main content

Zoomable plot of a list of colors in python with different coordinate systems

I'm trying to program a Python GUI for about 2 - 3 days now, which allows to zoom into a color palette. Since in the GUI or in the window the coordinates start with 0 and get bigger and bigger on x and y, a translation of the points has to be done. Example: I have a list "palette" of 12 colors in the format: [rgb1, rgb2, rgb3 ... ] and would like to draw it on the window. I prefer to draw the color strip from left to right using a for loop, and each iteration it draws a line from bottom to top. so that each pixel does not have a different color, i would have to divide the loop variable by the range of the window and multiply it by the range of the palette. Then I would have to get the color from the list using the rounded value. If I then take this value with a variable (the zoom), I can zoom in and out of the color strip. But then the center of the zoom is always to the left of the window (and he first color) and not where my mouse is.

To put it briefly: How can I program something like this: https://www.geeksforgeeks.org/how-to-zoom-in-on-a-point-using-scale-and-translate/, if I don't want to draw a single square at x1, y1, x2, y2, but a loop that iterates over the canvas? NOTE: i need this only for the x axis, the y axis is fixed. Any help and formula (note that i want to use a render loop) is welcome!

PS: here is my "mathematically incorrect" code (Python and pyqt6):

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        palette = [QColor(0,0,0),QColor(100,0,0),QColor(0,100,0),QColor(0,0,100),QColor(100,0,100),QColor(255,0,0)]
        Range = self.width()-20
        Len = len(palette)
        for k in range(Range):
            P = (((k-self.P)*self.zoom)+self.P)/Range*Len
            if P >= 0 and P < Len:
                qp.setPen(palette[math.floor(P)])
                qp.drawLine(10+k,0,10+k,self.width())
    
        
        
    def wheelEvent(self, e):
        
        
        if e.angleDelta().y() < 0:
            self.zoom = self.zoom/1.25
        else:
            self.zoom = self.zoom*1.25
        self.P -= (e.position().x() + self.P)/self.zoom
        print(self.P)
        self.update()
        self.P = e.position().x()-self.width()/2

I tried to use some formulas from the internet but these were different (not meant for iterating) Additionally, I tried to create my own formula, but either I didn't see where the color palette flew to, or it didn't zoom in the direction of my mouse.... It should look like a zoom function in an image editing program.



source https://stackoverflow.com/questions/74903257/zoomable-plot-of-a-list-of-colors-in-python-with-different-coordinate-systems

Comments

Popular posts from this blog

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console...

How to split a rinex file if I need 24 hours data

Trying to divide rinex file using the command gfzrnx but getting this error. While doing that getting this error msg 'gfzrnx' is not recognized as an internal or external command Trying to split rinex file using the command gfzrnx. also install'gfzrnx'. my doubt is I need to run this program in 'gfzrnx' or in 'cmdprompt'. I am expecting a rinex file with 24 hrs or 1 day data.I Have 48 hrs data in RINEX format. Please help me to solve this issue. source https://stackoverflow.com/questions/75385367/how-to-split-a-rinex-file-if-i-need-24-hours-data